JavaScript表单验证

本文介绍了一种表单验证的实现思路,包括如何获取表单元素的值、利用字符串方法和正则表达式进行数据验证,以及如何通过JavaScript事件处理进行实时反馈。

表单验证的实现思路

  1. 首先获取表单元素的值
  2. 根据业务规则,对获取的数据进行判断
  3. 但表单提示时,触发onsubmit事件,对获取的数据进行验证

验证方式

  1. String对象的属性和方法
  2. 正则表达式

String对象常用的属性和方法(与java的String对象的方法用法类似)

属性:

  1. length:返回字符串的长度(包括空格等)

方法:

  1. toLowerCase():把字符串转化为小写
  2. toUpperCase:把字符串转化为大写
  3. char At(index):返回在指定位置的字符
  4. indexOf(str,str):查找某个指定的字符串在字符串中首次出现的位置
  5. substring(index1,index2):返回位于指定索引index1和index2之间的字符串,并且包括索引index1对应的字符,不包括索引index2对应的字符

文本框对象(常用的属性、方法和事件)

属性:

  1. id:设置或返回文本域的id
  2. value:设置或返回文本域的value属性的值

方法:

  1. blur():从文本域中移开焦点
  2. focus():在文本域中设置焦点,即获得鼠标光标
  3. select():选取文本域中的内容

事件:

  1. onblur:失去焦点,当光标离开某个文本框时触发
  2. infocus:获得焦点,当光标进入某个文本框时触发
  3. onkeypress:某个键盘按键被按下并松开

正则表达式

  1. 正则表达式是对字符串操作的一种逻辑公式,就是用事件定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”
  2. 这个“规则字符串”用来表达对字符串的一种过滤逻辑
  3. RegExp对象是Regular Expression(正则表达式)的缩写,它是对字符串执行模式匹配的强大工具

正则表达式中常用的符号和用法

  • /.../:代表一个模式的开始和结束
  • ^:匹配字符串的开始
  • $:匹配字符串的结束
  • \s:任何空白字符
  • \S:任何非空白字符
  • \d:匹配一个数字字符,等价于[0-9]
  • \D:除了数字之外的任何字符,等价于[^0-9]
  • \w:匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
  • . :除了换行符之外的任意字符

正则表达式的重复字符

  • {n}:匹配前一项n次
  • {n,}:匹配前一次n次,或者多次
  • {n,m}:匹配前一项至少n次,但是不能超过m次
  • *:匹配前一项0次或多次,等价于{0,}
  • +:匹配前一项1次或多次,等价于{1,}
  • ?:匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}

定义正则表达式

普通方法:

var reg=/表达式/附加参数

构造函数:

var reg=new RegExp("表达式",“附加参数”)

RegExp对象的方法

  • exec:检索字符中是正则表达式的区配,返回找到的值,并确定其位置
  • test:检索字符串中指定的值,返回true或false

RegExp对象的属性

  • global:RegExp对象是否具有标志g
  • ignoreCase:RegExp对象是否具有标志i

String对象的方法

  • match:找到一个或多个正则表达式的匹配
  • search:检索与正则表达式相匹配的值
  • replace:替换与正则表达式匹配的字符串
  • split:把字符串分割为字符串数组

以下为实例:

<!DOCTYPE html>
<html>
<head>
    <title>表单验证</title>
    <meta charset="utf-8">
</head>
<body>
<!--表单注册页面     onsumit:提交表单做验证-->
<form method="get" action="#" onsubmit="return check()">
    用户名:<input type="text" name="username"><span id="nameSpan"></span><br/>
    密码:<input type="" name="password"><span id="pwdSpan"></span><br/>
    再次输入密码:<input type="" name="rePassword"><span id="repwdSpan"></span><br/>
    Email:<input type="" name="email"><span id="emailSpan"></span><br/>
    <input type="submit" name="" value="注册">
    <input type="reset" name="" value="重置">
</form>


</body>
</html>
<!--js代码-->
<script type="text/javascript">
    function check(){
        var uname=document.getElementsByName("username")[0].value
        var pwd=document.getElementsByName("password")[0].value
        var repwd=document.getElementsByName("rePassword")[0].value
        var email=document.getElementsByName("email")[0].value
        //取用户名的长度
        var namelength=uname.length;
        //获取span对象
        var nameSpan=document.getElementById("nameSpan");
        if(namelength==0){
            nameSpan.innerHTML='用户名不能为空';
            return false;
        }else if(namelength<4||namelength>16){
            nameSpan.innerHTML='用户名必须在4-16位之间';
            return false;
        }
        //获取密码的长度
        var pwdlength=pwd.length;
        //获取span对象
        var pwdSpan=document.getElementById("pwdSpan");
        if(pwdlength==0){
            pwdSpan.innerHTML='密码不能为空';
            return false;
        }else if(pwdlength<6){
            pwdSpan.innerHTML='密码不能少于6位';
            return false;
        }

        if(pwd!=repwd){
            var repwdSpan=document.getElementById("repwdSpan");
            repwdSpan.innerHTML='两次密码输入不一致';
            return false;
        }
        
        if(email.indexOf(".")==-1||email.indexOf("@")==-1){
            var emailSpan=document.getElementById("emailSpan");
            repwdSpan.innerHTML='邮箱格式不正确';
            return false;
        }
        //正确
        return true;
    }
</script>

该实例中,首先获取了用户输入的用户名,密码等信息,然后获取各字段的长度。通过if语句进行判断。通过输入框后面的span,动态判断用户是否输入合法。

获取光标事件

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
</head>
<body>

    <!--获取光标事件 onfocus-->
emil:<input type="text" onfocus="clearText()" id="email" placeholder="请输入邮箱地址" type="email">

</body>
</html>
<script type="text/javascript">
    function clearText(){
        var email=document.getElementById("email");
        email.placeholder="";
    }
</script>

当鼠标点击输入框内时,输入框中的提示文字会自动消失。此效果通过获取光标事件:onfocus来实现。

<!DOCTYPE html>
<html>
<head>
    <title>表单验证</title>
    <meta charset="utf-8">
</head>
<body>
<!--表单注册页面     onsumit:提交表单做验证-->
<form method="get" action="success.html" onsubmit="return check()">
    用户名:<input type="text" onblur="checkname()" name="username"><span id="nameSpan"></span><br/>
    密码:<input type="password" onblur="checkpwd()" name="password"><span id="pwdSpan"></span><br/>
    再次输入密码:<input type="password"  onblur="checkrepwd()" name="rePassword"><span id="repwdSpan"></span><br/>
    Email:<input type="" onblur="checkmail()" name="email"><span id="emailSpan"></span><br/>
    <input type="submit" name="" value="注册">
    <input type="reset" name="" value="重置">
</form>


</body>
</html>
<!--js代码-->
<script type="text/javascript">
    function check(){    
        /*if(checkname()&&checkpwd()&&checkrepwd()&&checkmail()){
            return true;
        }
        return false; */
        return checkname()&&checkpwd()&&checkrepwd()&&checkmail();
    }
    
//用户名
function checkname(){
    var uname=document.getElementsByName("username")[0].value;
    //取用户名的长度
    var namelength=uname.length;
    //获取span对象
    var nameSpan=document.getElementById("nameSpan");
    if(namelength==0){
            nameSpan.innerHTML='用户名不能为空';
            return false;
        }else if(namelength<4||namelength>16){
            nameSpan.innerHTML='用户名必须在4-16位之间';
            return false;
        }
        nameSpan.innerHTML='';
        return true;    
}

//密码
function checkpwd(){
    var pwd=document.getElementsByName("password")[0].value;
    //获取密码的长度
    var pwdlength=pwd.length;
    //获取span对象
    var pwdSpan=document.getElementById("pwdSpan");
    if(pwdlength==0){
            pwdSpan.innerHTML='密码不能为空';
            return false;
        }else if(pwdlength<6){
            pwdSpan.innerHTML='密码不能少于6位';
            return false;
        }
        pwdSpan.innerHTML='';
        return true;
}

//再次输入密码
function checkrepwd(){
    var pwd=document.getElementsByName("password")[0].value;
    var repwd=document.getElementsByName("rePassword")[0].value;
    var repwdSpan=document.getElementById("repwdSpan");
    if(pwd!=repwd){
            repwdSpan.innerHTML='两次密码输入不一致';
            return false;
        }
        repwdSpan.innerHTML='';
        return true;
}

//邮箱
function checkmail(){
    var email=document.getElementsByName("email")[0].value;
    var emailSpan=document.getElementById("emailSpan");
    if(email.indexOf(".")==-1||email.indexOf("@")==-1){
            emailSpan.innerHTML='邮箱格式不正确';
            return false;
        }
        emailSpan.innerHTML='';
        return true;
}


</script>

以上达到的页面效果为,当用户输入用户名时,会使用获取光标时间,实时改变span内的提示语。用户名、邮箱、密码、再次输入密码分别进行判断。如果合法则返回true,不合法返回false。

正则表达式:

替换字符串中的a,变为H

(普通写法)

        var regExp=/a/ig;
        //定义一个字符串
        var str="Abbcjdkca";
        var newstr=str.replace(regExp,'H');
        alert(newstr);        

(构造函数写法)

        var str1="aaaaaaaaaaaa";
        var regExp1=new RegExp('a','ig');
        var newstr1=str1.replace(regExp1,'B');
        alert(newstr1);

固定电话 区号为3位或4位,号码为7位或8位。

        var regExp2=/^\d{3,4}-\d{7,8}$/;
        var phone="037-23742934";
        if (!regExp2.test(phone)) {
            alert("电话格式输入错误")
        }else{
            alert("正确,号码为:"+phone)
        }

4-16位用户名  

var regExp3=/^\w{4,16}$/

输入一个手机,判断全部是数字

var regExp4=/^\d{11}$/

以下为通过正则表达式达到简单表单验证的实例:

<!DOCTYPE html>
<html>
<head>
    <title>改-正则表达式-表单验证</title>
    <meta charset="utf-8">
</head>
<body>
<!--表单注册页面     onsumit:提交表单做验证-->
<form method="get" action="success.html" onsubmit="return check()">
    用户名:<input type="text" onblur="checkname()" name="username"><span  id="nameSpan"></span><br/>
    密码:<input type="password" onblur="checkpwd()" name="password"><span id="pwdSpan"></span><br/>
    再次输入密码:<input type="password"  onblur="checkrepwd()" name="rePassword"><span id="repwdSpan"></span><br/>
    Email:<input type="" onblur="checkmail()" name="email"><span id="emailSpan"></span><br/>
    <input type="submit" name="" value="注册">
    <input type="reset" name="" value="重置">
</form>


</body>
</html>
<!--js代码-->
<script type="text/javascript">
    function check(){    
        return checkname()&&checkpwd()&&checkrepwd()&&checkmail();
    }
    
//用户名
function checkname(){
    var uname=document.getElementsByName("username")[0].value;
    //获取span对象
    var nameSpan=document.getElementById("nameSpan");
    var regExp3=/^\w{4,16}$/;//用户名在4-16位之间的正则表达式
    if (!regExp3.test(uname)) {
            nameSpan.innerHTML='用户名必须在4-16位之间';
            return false;
    }
        nameSpan.innerHTML='';
        return true;    
}

//密码
function checkpwd(){
    var pwd=document.getElementsByName("password")[0].value;
    //获取span对象
    var pwdSpan=document.getElementById("pwdSpan");
    var regExp3=/^\w{6,}$/;
        if(!regExp3.test(pwd)){
        pwdSpan.innerHTML='密码不能少于6位';
            return false;
    }
        pwdSpan.innerHTML='';
        return true;
}

//再次输入密码
function checkrepwd(){
    var pwd=document.getElementsByName("password")[0].value;
    var repwd=document.getElementsByName("rePassword")[0].value;
    var repwdSpan=document.getElementById("repwdSpan");
    if(pwd!=repwd){
            repwdSpan.innerHTML='两次密码输入不一致';
            return false;
        }
        repwdSpan.innerHTML='';
        return true;
}

//邮箱
function checkmail(){
    var email=document.getElementsByName("email")[0].value;
    var emailSpan=document.getElementById("emailSpan");
    var regExp=/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
    if(!regExp.test(email)){
            emailSpan.innerHTML='邮箱格式不正确';
            return false;
    }

        emailSpan.innerHTML='';
        return true;
}


</script>

 

转载于:https://www.cnblogs.com/sonder/p/8869901.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值