表单验证模板

<html>
    <head>
        <script src="check.js"></script>
        <style>
            span{
                font-size:12px;
            }
            .stats1{
                color:#aaa; <!-- 默认灰色 -->
            }
            
            .stats2{
                color:#000;
            }
            
            .stats3{
                color:red;
            }
            
            .stats4{
                color:green;
            }
            
        </style>
    </head>
        
    <body>
        <form action="" method="" onsubmit="return regs('submit')">
            username:<input type="text" name="username" value="">
            <span class="stats1">请输入用户名</span><br/>
            password:<input type="password" name="password" value="">
            <span class="stats1">请输入密码</span><br/>
            repass:<input type="password" name="repass" value="">
            <span class="stats1">请再次输入密码</span></br/>
            email:<input type="text" name="email" value="">
            <span class="stats1">请输入邮箱</span><br/>
            other:<input type="text" name="other" value="">
            <span class="stats1">请输入其他</span><br/>
            <input type="submit" name="sub" value="submit">
        </form>
    </body>
</html>
//页面加载完自动调用
onload=regs;

//一个函数,可以使用onsubmit调用,也可以使用onload调用
function regs(subm){//我们直接提交表单不会验证,怎么解决呢?我们需要让函数进行判断,直接点击提交的时候得到一个信号,所有验证都执行,使用参数
    var stat=true;
    var username=document.getElementsByName("username")[0];
    var password=document.getElementsByName("password")[0];
    var repass=document.getElementsByName("repass")[0];
    var email=document.getElementsByName("email")[0];
    var other=document.getElementsByName("other")[0];
    
    //为了省代码,使用下一个同胞获取span
    //alert(username.nextSibling.nodeName);/前面这种方式有可能控件后面是空格或者图片,所以我们使用一个小算法得到span
    //alert(gspan(username).nodeName);
    check(username,"用户名的长度要在3-20之间",function(val){
        //if(val.match(/^S+$/) && val.length>=3 &&username.value.length<=20){
        if(val.match(/^S{3,20}$/)){
            return true;
        }else{
            stat=false;
            return false;
        }
    },subm);
    
    check(password,"密码必须在6-20位之间",function(val){
        //if(val.match(/^S+$/) && val.length>=6 &&val.length<=20){
        if(val.match(/^S{6,20}$/)){
            return true;
        }else{
            stat=false;
            return false;
        }
    },subm);
    
    check(repass,"确认密码要和上面一致,规则也要相同",function(val){
        //if(val.match(/^S+$/) && val.length>=6 &&val.length<=20 && val==password.value ){
        if(val.match(/^S{3,20}$/) && val==password.value ){ 
            return true;
        }else{
            stat=false;
            return false;
        }
    },subm);
    
    check(email,"要按邮箱规则输入",function(val){
        if(val.match(/w+@w+.w+/)){
            return true;
        }else{
            stat=false;
            return false;
        }
    },subm);
    return stat;
}

function gspan(cobj){//找到下一个span
    while(true){
        if(cobj.nextSibling.nodeName!="SPAN"){
            cobj=cobj.nextSibling;
        }else{
            return cobj.nextSibling;
        }
        
    }
    
}
/*
    通用检查方法:
        第一个参数:obj,用来检查的对象
        第二个参数:info,用来检查的提示信息
        第三个参数:fun,用来检查值是否按条件输入
        第四个参数:subm,状态判定,分清是点击提交还是失去焦点
*/
function check(obj,info,fun,subm){
    var sp=gspan(obj);
    obj.onfocus=function(){//得到焦点提示
        //var sp=gspan(username);
        sp.innerHTML=info
        sp.className="stats2";
    }
    obj.onblur=function(){
        //if(username.value.match(/^S+$/) && username.value.length>=3 &&username.value.length<=20){
        if(fun(this.value)){
            sp.innerHTML="输入正确";
            sp.className="stats4";
        }else{
            sp.innerHTML=info;
            sp.className="stats3";
        }
    }
    if(subm=="submit"){
        obj.onblur();
    }
}
原文地址:https://www.cnblogs.com/aigeileshei/p/5619249.html