zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js验证模型自我实现的具体方法

JS 模型 验证 具体方法
2023-06-13 09:15:02 时间

市面上有很多表单验证的框架,教我们怎么验证表单的数据提交,说实话也真的很简单,但是我们会有一种感觉我们要是离开了这些框架的时候,我们有时候会束手无策,然后js验证写的很不规范,没有一套比较好的模式,那我写这篇的目的就是:我们自己构建js验证应该是什么样子的,来慢慢看一下。
假设我们现在写一个登录的页面(这可能是最简单的数据提交了哦),html页面会有一个用户名和一个密码的文本框让我们用户输入自己的用户名和密码,我们肯定是要判断用户名和密码是否为空,很明显这样的js验证判断是放在onblur事件里面触发,html代码如下:

ValidateHelper是一个对象,一些验证的方法就是在这个对象里面,我们规定一下,js验证用户的输入有两返回结果,一个成功,一个是失败。成功的时候我们输出成功的提示,
失败的时候我们输出失败的提示,对应的两个输出方法:

复制代码代码如下:

   normalMessage:function(jqueryObj,msg){
       varemObj=$(jqueryObj.parent().find("em")[0]);
       emObj.empty().append(msg);
   },
   warningMessage:function(jqueryObj,msg){
       ValidateHelper.clearMessage(jqueryObj);
       varemObj=$(jqueryObj.parent().find("em")[0]);
       varspanElement="<spanstyle="color:#FF4C31;float:left;height:23px;line-height:23px;padding:010px035px;">"
               +msg
               +"</span>";
       emObj.empty().append(spanElement);

   },


还有一个清除提示的方法:
复制代码代码如下:

clearMessage:function(jqueryObj){
   varemObj=$(jqueryObj.parent().find("em")[0]);
   emObj.empty();
},

我们已经写了成功和失败提示方法,以及清除提示的方法,这个三个是我们在后面会一直调用的基本方法。
好了,我们写一个验证用户输入不能为空的方法:
复制代码代码如下:
   validateStringValueIsEmpty:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if($.trim(jqueryObj.val()).length==0){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },

这个方法会在onblur中被调用的验证方法,里面自然也用到了成功和失败提示方法,以及清除提示的方法。参数有三个,要验证的Dom或者jQuery对象、成功提示信息、失败提示信
息。要是为空就失败,要是不为空就成功。
上面写好的方法在onblur中会触发的,我们提交数据的时候还会用到得哦:
复制代码代码如下:
   initInfo:function(){

       varuserName=$("#email");
       varuserPwd=$("#setPwd");
       if(!ValidateHelper.validateStringValueIsEmpty(userName,"通过","不能为空")){
           userName.focus();
           returnnull;
       }
       if(!ValidateHelper.validateStringValueIsEmpty(userPwd,"通过","不能为空")){
           userPwd.focus();
           returnnull;
       }

       varuserInfo={
           UserName:userName.val(),
           UserPwd:userPwd.val()
       };

       returnuserInfo;
   },

   post:function(){

       varuserInfo=ValidateHelper.initInfo();
       if(userInfo==null){
           return;
       }

       $.ajax({
           type:"post",
           dataType:"text",
           url:"Ajax/Module.aspx",
           timeout:30000,
           data:{UserName:userInfo.UserName,UserPwd:userInfo.UserPwd},
           success:function(data){
               alert(data.toString());
           }
       });
   }


这边呢要是在提交数据的时候会调用validateStringValueIsEmpty方法,要是返回的是失败是不会真的提交给服务器端得。
那上面的情况是一个最简单的处理不为空的情况,要是我们想验证是否是Email是否是身份证号码,这些复杂的验证实现如下:
复制代码代码如下:
varValidation={
   textCount:function(field,counter,maxLimit){
       varmessage=$(field).val();
       if($(field).val().length>maxLimit)
           $(field).val(message.substring(0,maxLimit))
       //$(counter).text(maxLimit-field.value.length);   
   },
   refreshValidator:function(img,input){
       $(img).attr("src",$(img).attr("src")+"&r="+Math.random());
       $(input).focus();
   },
   isUrl:function(s){
       varstrRegex=
                           /^((http(s)?|ftp|telnet|news|rtsp|mms):\/\/)?(((\w(\-*\w)*\.)+[a-zA-Z]{2,4})|(((1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).){3}(1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).?))(:\d{0,5})?(\/+.*)*$/;
       returnstrRegex.test(s);
   },
   isDecimal:function(d){varpattern=/^(([1-9]\d{0,12})|0)(\.\d{1,2})?$/;returnpattern.test(d);},
   isEmail:function(s){
       varpattern=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
       returnpattern.test(s);
   },
   isLowEmail:function(s){
       varb,e;
       b=s.indexOf("@");
       e=s.indexOf(".");
       if(b<=0)returnfalse;
       if(e<0||e==(s.length-1)){returnfalse;}
       returntrue;
   },
   clearNoNum:function(event,obj){
       event=window.event||event;
       if(event.keyCode==37|event.keyCode==39){
           return;
       }
       obj.value=obj.value.replace(/[^\d.]/g,"");
       obj.value=obj.value.replace(/^\./g,"");
       obj.value=obj.value.replace(/\.{2,}/g,".");
       obj.value=obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
   },
   checkNum:function(obj){
       obj.value=obj.value.replace(/\.$/g,"");
   },
   isInteger:function(value){
       varintegerReg=newRegExp(/^\d+$/);
       returnintegerReg.test(value);
   },
   isValidateReg:function(value){
       varvalidateReg=/^([A-Za-z0-9\s\-\_\~\!\@\#\$\%\^\&\*\(\)\|\<\>\?\:\;\"\"\.\[\]\{\}\,\+\`\/\\\=]){6,16}$/;
       if(validateReg.test(value)){
           returntrue;
       }
       returnfalse;
   },
   isDate:function(strValue){
       varobjRegExp=/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

       if(!objRegExp.test(strValue))
           returnfalse;
       else{
           vararrayDate=strValue.split(RegExp.$1);
           varintDay=parseInt(arrayDate[2],10);
           varintYear=parseInt(arrayDate[0],10);
           varintMonth=parseInt(arrayDate[1],10);
           if(intMonth>12||intMonth<1){
               returnfalse;
           }
           vararrayLookup={"1":31,"3":31,"4":30,"5":31,"6":30,"7":31,
               "8":31,"9":30,"10":31,"11":30,"12":31
           }
           if(arrayLookup[parseInt(arrayDate[1])]!=null){
               if(intDay<=arrayLookup[parseInt(arrayDate[1])]&&intDay!=0)
                   returntrue;
           }
           if(intMonth-2==0){
               varbooLeapYear=(intYear%4==0&&(intYear%100!=0||intYear%400==0));
               if(((booLeapYear&&intDay<=29)||(!booLeapYear&&intDay<=28))&&intDay!=0)
                   returntrue;
           }
       }
       returnfalse;
   },
   isZip:function(value){
       varvalidateReg=/^[0-9]{6}$/;
       returnvalidateReg.test(value);
   },
   checkSpecialChar:function(value){
       varvalidateReg=/([~!@#$%^&*\/\\,.\(\)]){6,16}$/;
       returnvalidateReg.test(value);
   },
   CheckSpecialString:function(value){
       varvalidateReg=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/;
       returnvalidateReg.test(value);
   },
   isTel:function(s){
       varpatrn=/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
       if(!patrn.exec(s))returnfalse
       returntrue
   },

   isMobile:function(value){
       varvalidateReg=/^1\d{10}$/;
       returnvalidateReg.test(value);
   },
   getLength:function(value){
       returnvalue.replace(/[^\x00-\xff]/g,"**").length;
   },
   isLicence:function(value){
       varvalidateReg=/^[A-Za-z]{10}[0-9]{10}$/;
       returnvalidateReg.test(value);
   },
   isPersonalCard:function(value){
       varvalidateReg=/(^\d{15}$)|(^\d{17}(\d|[A-Za-z]{1})$)/;
       returnvalidateReg.test(value);
   },
   isOrganizationCodeCard:function(value){
       varvalidateReg=/^[A-Za-z0-9]{9}$/;
       returnvalidateReg.test(value);
   },
   isBankAccount:function(value){
       varvalidateReg=/^[1-9]{1}[0-9]*$/;
       returnvalidateReg.test(value);
   },
   MaxLength:function(field,maxlimit){
       varj=field.value.replace(/[^\x00-\xff]/g,"**").length;
       vartempString=field.value;
       vartt="";
       if(j>maxlimit){
           for(vari=0;i<maxlimit;i++){
               if(tt.replace(/[^\x00-\xff]/g,"**").length<maxlimit)
                   tt=tempString.substr(0,i+1);
               else
                   break;
           }
           if(tt.replace(/[^\x00-\xff]/g,"**").length>maxlimit){
               tt=tt.substr(0,tt.length-1);
               field.value=tt;
           }
           else{
               field.value=tt;
           }
       }
   }
};



这个类是写了一些验证Email、身份证号码等等的正则表达式,供我们后面使用,使用方法如下:
复制代码代码如下:
   validateStringValueForEmail:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if(!ValidateHelper.validateStringValueIsEmpty(jqueryObj,"通过","不能为空")){
           ValidateHelper.warningMessage(jqueryObj,"不能为空");
           returnfalse;
       }
       if(!Validation.isEmail(jqueryObj.val())){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },
   validateStringValueForCardID:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if(!ValidateHelper.validateStringValueIsEmpty(jqueryObj,"通过","不能为空")){
           ValidateHelper.warningMessage(jqueryObj,"不能为空");
           returnfalse;
       }
       if(!Validation.isPersonalCard(jqueryObj.val())){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },


那到这边是基本可以处理我们的一般的js验证了,可以试试以后用在自己的框架上,我们把自己调试的源码附上:
ASPX:
复制代码代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="FormValidateModuleEx._Default"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
   <title></title>

   <scriptsrc="js\jquery-1.6.2.min.js"type="text/javascript"></script>
   <scriptsrc="js\MyValidate.js"type="text/javascript"></script>
   <%--<scriptsrc="js\CheckPersonCardID.js"type="text/javascript"></script>--%>
</head>
<body>
   <div>
       <li>
           <labelfor="email">
               用户名:
           </label>
           <inputname="email"type="text"id="email"maxlength="50"onblur="returnValidateHelper.validateStringValueIsEmpty($(this),"通过","不能为空");"/><em></em>
       </li>
       <li>
           <labelfor="setPwd">
               密码:
           </label>
           <inputname="setPwd"type="password"id="setPwd"maxlength="16"onblur="returnValidateHelper.validateStringValueIsEmpty($(this),"通过","不能为空");"/><em></em>
       </li>
       <li>
           <labelfor="setPwd">
               身份证:
           </label>
           <inputname="cardId"type="text"id="cardId"onblur="returnValidateHelper.validateStringValueForCardID($(this),"通过","身份证格式不正确");"/><em></em><%--IdCardValidate($(this),"身份证的格式不正确");--%>
       </li>
       <li>
           <labelfor="setPwd">
               Email:
           </label>
           <inputname="againEmail"type="text"id="againEmail"onblur="returnValidateHelper.validateStringValueForEmail($(this),"通过","email格式不正确");"/><em></em>
       </li>
       <li><inputonclick="returnValidateHelper.post();"type="button"id="btnPost"/></li>
   </div>
</body>
</html>


js:
复制代码代码如下:
varValidation={
   textCount:function(field,counter,maxLimit){
       varmessage=$(field).val();
       if($(field).val().length>maxLimit)
           $(field).val(message.substring(0,maxLimit))
       //$(counter).text(maxLimit-field.value.length);   
   },
   refreshValidator:function(img,input){
       $(img).attr("src",$(img).attr("src")+"&r="+Math.random());
       $(input).focus();
   },
   isUrl:function(s){
       varstrRegex=
                           /^((http(s)?|ftp|telnet|news|rtsp|mms):\/\/)?(((\w(\-*\w)*\.)+[a-zA-Z]{2,4})|(((1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).){3}(1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).?))(:\d{0,5})?(\/+.*)*$/;
       returnstrRegex.test(s);
   },
   isDecimal:function(d){varpattern=/^(([1-9]\d{0,12})|0)(\.\d{1,2})?$/;returnpattern.test(d);},
   isEmail:function(s){
       varpattern=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
       returnpattern.test(s);
   },
   isLowEmail:function(s){
       varb,e;
       b=s.indexOf("@");
       e=s.indexOf(".");
       if(b<=0)returnfalse;
       if(e<0||e==(s.length-1)){returnfalse;}
       returntrue;
   },
   clearNoNum:function(event,obj){
       event=window.event||event;
       if(event.keyCode==37|event.keyCode==39){
           return;
       }
       obj.value=obj.value.replace(/[^\d.]/g,"");
       obj.value=obj.value.replace(/^\./g,"");
       obj.value=obj.value.replace(/\.{2,}/g,".");
       obj.value=obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
   },
   checkNum:function(obj){
       obj.value=obj.value.replace(/\.$/g,"");
   },
   isInteger:function(value){
       varintegerReg=newRegExp(/^\d+$/);
       returnintegerReg.test(value);
   },
   isValidateReg:function(value){
       varvalidateReg=/^([A-Za-z0-9\s\-\_\~\!\@\#\$\%\^\&\*\(\)\|\<\>\?\:\;\"\"\.\[\]\{\}\,\+\`\/\\\=]){6,16}$/;
       if(validateReg.test(value)){
           returntrue;
       }
       returnfalse;
   },
   isDate:function(strValue){
       varobjRegExp=/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

       if(!objRegExp.test(strValue))
           returnfalse;
       else{
           vararrayDate=strValue.split(RegExp.$1);
           varintDay=parseInt(arrayDate[2],10);
           varintYear=parseInt(arrayDate[0],10);
           varintMonth=parseInt(arrayDate[1],10);
           if(intMonth>12||intMonth<1){
               returnfalse;
           }
           vararrayLookup={"1":31,"3":31,"4":30,"5":31,"6":30,"7":31,
               "8":31,"9":30,"10":31,"11":30,"12":31
           }
           if(arrayLookup[parseInt(arrayDate[1])]!=null){
               if(intDay<=arrayLookup[parseInt(arrayDate[1])]&&intDay!=0)
                   returntrue;
           }
           if(intMonth-2==0){
               varbooLeapYear=(intYear%4==0&&(intYear%100!=0||intYear%400==0));
               if(((booLeapYear&&intDay<=29)||(!booLeapYear&&intDay<=28))&&intDay!=0)
                   returntrue;
           }
       }
       returnfalse;
   },
   isZip:function(value){
       varvalidateReg=/^[0-9]{6}$/;
       returnvalidateReg.test(value);
   },
   checkSpecialChar:function(value){
       varvalidateReg=/([~!@#$%^&*\/\\,.\(\)]){6,16}$/;
       returnvalidateReg.test(value);
   },
   CheckSpecialString:function(value){
       varvalidateReg=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/;
       returnvalidateReg.test(value);
   },
   isTel:function(s){
       varpatrn=/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
       if(!patrn.exec(s))returnfalse
       returntrue
   },

   isMobile:function(value){
       varvalidateReg=/^1\d{10}$/;
       returnvalidateReg.test(value);
   },
   getLength:function(value){
       returnvalue.replace(/[^\x00-\xff]/g,"**").length;
   },
   isLicence:function(value){
       varvalidateReg=/^[A-Za-z]{10}[0-9]{10}$/;
       returnvalidateReg.test(value);
   },
   isPersonalCard:function(value){
       varvalidateReg=/(^\d{15}$)|(^\d{17}(\d|[A-Za-z]{1})$)/;
       returnvalidateReg.test(value);
   },
   isOrganizationCodeCard:function(value){
       varvalidateReg=/^[A-Za-z0-9]{9}$/;
       returnvalidateReg.test(value);
   },
   isBankAccount:function(value){
       varvalidateReg=/^[1-9]{1}[0-9]*$/;
       returnvalidateReg.test(value);
   },
   MaxLength:function(field,maxlimit){
       varj=field.value.replace(/[^\x00-\xff]/g,"**").length;
       vartempString=field.value;
       vartt="";
       if(j>maxlimit){
           for(vari=0;i<maxlimit;i++){
               if(tt.replace(/[^\x00-\xff]/g,"**").length<maxlimit)
                   tt=tempString.substr(0,i+1);
               else
                   break;
           }
           if(tt.replace(/[^\x00-\xff]/g,"**").length>maxlimit){
               tt=tt.substr(0,tt.length-1);
               field.value=tt;
           }
           else{
               field.value=tt;
           }
       }
   }
};


varValidateHelper={
   validateStringValueIsEmpty:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if($.trim(jqueryObj.val()).length==0){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },
   validateStringValueForEmail:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if(!ValidateHelper.validateStringValueIsEmpty(jqueryObj,"通过","不能为空")){
           ValidateHelper.warningMessage(jqueryObj,"不能为空");
           returnfalse;
       }
       if(!Validation.isEmail(jqueryObj.val())){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },
   validateStringValueForCardID:function(obj,normalMsg,warningMsg){
       varjqueryObj=$(obj);
       ValidateHelper.clearMessage(obj);
       if(!ValidateHelper.validateStringValueIsEmpty(jqueryObj,"通过","不能为空")){
           ValidateHelper.warningMessage(jqueryObj,"不能为空");
           returnfalse;
       }
       if(!Validation.isPersonalCard(jqueryObj.val())){
           ValidateHelper.warningMessage(jqueryObj,warningMsg);
           returnfalse;
       }
       else{
           ValidateHelper.normalMessage(jqueryObj,normalMsg);
           returntrue;
       }
   },
   normalMessage:function(jqueryObj,msg){
       varemObj=$(jqueryObj.parent().find("em")[0]);
       emObj.empty().append(msg);
   },
   warningMessage:function(jqueryObj,msg){
       ValidateHelper.clearMessage(jqueryObj);
       varemObj=$(jqueryObj.parent().find("em")[0]);
       varspanElement="<spanstyle="color:#FF4C31;float:left;height:23px;line-height:23px;padding:010px035px;">"
               +msg
               +"</span>";
       emObj.empty().append(spanElement);

   },
   clearMessage:function(jqueryObj){
       varemObj=$(jqueryObj.parent().find("em")[0]);
       emObj.empty();
   },
   initInfo:function(){

       varuserName=$("#email");
       varuserPwd=$("#setPwd");
       if(!ValidateHelper.validateStringValueIsEmpty(userName,"通过","不能为空")){
           userName.focus();
           returnnull;
       }
       if(!ValidateHelper.validateStringValueIsEmpty(userPwd,"通过","不能为空")){
           userPwd.focus();
           returnnull;
       }

       varuserInfo={
           UserName:userName.val(),
           UserPwd:userPwd.val()
       };

       returnuserInfo;
   },

   post:function(){

       varuserInfo=ValidateHelper.initInfo();
       if(userInfo==null){
           return;
       }

       $.ajax({
           type:"post",
           dataType:"text",
           url:"Ajax/Module.aspx",
           timeout:30000,
           data:{UserName:userInfo.UserName,UserPwd:userInfo.UserPwd},
           success:function(data){
               alert(data.toString());
           }
       });
   }
}