Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10511
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-07 10:15
文章分类
文章存档

2015年(6)

我的朋友
最近访客

分类: Web开发

2015-08-31 15:59:06

表单验证js封装

         表单验证在项目中可以说是必不可少的部分,只要有输入就有表单验证,从最简单的验证为不为空,到复杂的验证特殊字符,验证是不是邮箱,电话等特殊字符。当然最基本的原理大家都知道,就是用正则表达式。

         但是多个文本框需要验证,网站建设小编说都要重复的调用写好的一个又一个的验证函数么?项目做了一段时间,开始重新整合自己的代码,发现表单验证这块可以提出来,重 新封装一下。在网上参考了大家不同的封装方法,都觉得不是自己想要的,于是就“自己动手,丰衣足食“自己仿照之前做mvc的时候controller的那 种命名方法封了一个表单验证js:

[javascript] view plaincopy
  1. //文本框验证方法  
  2. //需要验证的文本框的name属性,需要按照”xx“+type 这样的格式,其中xx随意,xx为传入的参数,例如想要验证输入的是否为中文,则name="xxChinese"  
  3.     function Validation(name){  
  4.         var t = $("input[name^=" + name + "]");  
  5.         for (var i = 0; i < t.length; i++) {  
  6.             if (t[i].value == null || t[i].value == "") {  
  7.                 t[i].focus();  
  8.                 t[i].select();  
  9.                 myMsg("不能为空");  
  10.                 return false;  
  11.                 break;  
  12.             } else {  
  13.                 switch (t[i].name) {  
  14.                     case name+"English"if (isEnglish(t[i].value) == false) {  
  15.                         t[i].focus();  
  16.                         t[i].select();  
  17.                         alert("请输入英文");  
  18.                         return false;  
  19.                     }  
  20.                         break;  
  21.                     case name+"Chinese"if (isChinese(t[i].value) == false) {  
  22.                         t[i].focus();  
  23.                         t[i].select();  
  24.                         alert("请输入中文");  
  25.                         return false;  
  26.                     }  
  27.                         break;  
  28.                     case name+"Phone"if (isPhone(t[i].value) == false) {  
  29.                         t[i].focus();  
  30.                         t[i].select();  
  31.                         alert("请输入正确的手机号");  
  32.                         return false;  
  33.                     }  
  34.                         break;  
  35.                     case name+"Url"if (isUrl(t[i].value)==false) {  
  36.                         t[i].focus();  
  37.                         t[i].select();  
  38.                         alert("请输入正确的url地址");  
  39.                         return false;  
  40.                     }  
  41.                 default:  
  42.                 }  
  43.             }  
  44.         }  
  45.     }  


         这个验证只需要传一个text的name属性的公共部分“xx“,然后按照xx+type的格式给text的name属性赋值即可。例如我想要验证一个文 本框是否是英文,text的name 属性为txtEnglish ,然后只要给js传一个txt,就可以自动完成验证(维修网)。

         代码就是一个越写越多,然后越写越少,越写越精的过程,反复,抽象,让代码更美。

         文章来源: style="color:#000000;">。
[javascript] view plaincopy
  1. * 常用表单验证封装  
  2.  * BY bruce 2013-05-27  
  3.  */  
  4. var shapebase=new ShapeBase();  
  5. function ShapeBase()  
  6. {  
  7.     //formobj = document.getElementsByName(frmname);  
  8.     /** 
  9.      * 非空校验 
  10.      */  
  11.     ShapeBase.notEmpty=function(obj,strNote)  
  12.     {  
  13.         var tempValue=ShapeBase.trim(obj.value);  
  14.         if(tempValue=="")  
  15.         {  
  16.             alert("【"+strNote+"】不能为空!");  
  17.             return false;  
  18.         }  
  19.         return true;  
  20.     }  
  21.     /** 
  22.      * 验证数字 
  23.      * @param minLen:最小长度,不校验传0;maxLen:最大长度,不校验传0 
  24.      */  
  25.     ShapeBase.isDigit=function(obj,minLen,maxLen,strNote)   
  26.     {   
  27.         var patrn=/^\d|([1-9][0-9]{1,})$/;   
  28.         if (!patrn.exec(obj.value))   
  29.         {  
  30.             alert("【"+strNote+"】必须由数字组成!");  
  31.             return false;  
  32.         }  
  33.         //长度验证  
  34.         return ShapeBase.lengthLimit(obj, minLen, maxLen,strNote);  
  35.         return true;   
  36.     }   
  37.     /** 
  38.      * 校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串  
  39.      */  
  40.     ShapeBase.checkUserName=function(obj)   
  41.     {   
  42.         var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;   
  43.         if (!patrn.exec(obj.value))   
  44.         {  
  45.             alert("登录名不合法!登录名只能由5-20个字母、数字、下划线组成,并以字母开头!");  
  46.             return false ;  
  47.         }  
  48.         return true ;  
  49.     }   
  50.     /** 
  51.      * 校验密码:只能输入6-20个字母、数字、下划线  
  52.      */  
  53.     ShapeBase.checkPwd=function(obj)   
  54.     {   
  55.         var patrn=/^(\w){6,20}$/;   
  56.         if (!patrn.exec(obj.value))  
  57.         {  
  58.             alert("密码格式不合法!只能输入字母、数字、下划线!");  
  59.             return false;   
  60.         }  
  61.         return true ;  
  62.     }   
  63.     /** 
  64.      * 校验密码:两次密码是否一致 
  65.      */  
  66.     ShapeBase.checkRepeatPwd=function(obj1,obj2)   
  67.     {   
  68.         if (obj1.value!=obj2.value)  
  69.         {  
  70.             alert("密码不一致!请重新输入");  
  71.             obj1.value="";  
  72.             obj2.value="";  
  73.             return false;   
  74.         }  
  75.         return true ;  
  76.     }   
  77.     /** 
  78.      * 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”  
  79.      * @param canImpty:1,可空;0,必填 
  80.      */  
  81.     ShapeBase.checkTel=function(obj,canImpty)   
  82.     {   
  83.         if(canImpty==1)  
  84.         {  
  85.             if(obj.value=="")  
  86.             {  
  87.                 return true;  
  88.             }  
  89.         }  
  90.         var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;   
  91.         if (!patrn.exec(obj.value))  
  92.         {  
  93.             alert("电话/传真号码格式不正确!");  
  94.             return false ;  
  95.         }  
  96.         return true ;  
  97.     }   
  98.     /** 
  99.      * 验证手机号 
  100.      * @param canImpty:1,可空;0,必填 
  101.      */  
  102.     ShapeBase.checkMobile=function(obj,canImpty)  
  103.     {     
  104.         if(canImpty==1)  
  105.         {  
  106.             if(obj.value=="")  
  107.             {  
  108.                 return true;  
  109.             }  
  110.         }  
  111.         if (!(/^1[\d]{10}$/g.test(obj.value))) {  
  112.             alert("手机号码格式不正确,请确认!");  
  113.             return false;  
  114.         }  
  115.     }  
  116.     /** 
  117.      * 只能是汉字 
  118.      */  
  119.     ShapeBase.isChinese=function(obj,strNote)  
  120.     {  
  121.         var reg = /^[\u4e00-\u9fa5]+$/gi;   
  122.         if(!reg.test(obj.value))   
  123.         {  
  124.             alert("【"+strNote+"】必须为汉字!");   
  125.             //obj.select();  
  126.             return false;   
  127.         }  
  128.         return true;  
  129.     }  
  130.     /** 
  131.      * 长度限制 
  132.      * @param obj:对象,minLen:最小长度,maxLen:最大长度 
  133.      */  
  134.     ShapeBase.lengthLimit=function(obj,minLen,maxLen,strNote)  
  135.     {  
  136.         if(minLen>0&&maxLen>0)  
  137.         {  
  138.             if(obj.value.length<minLen||obj.value.length>maxLen)  
  139.             {  
  140.                 alert("【"+strNote+"】长度必须是"+minLen+"至"+maxLen+"个字符!");  
  141.             }  
  142.         }  
  143.         else if(maxLen>0)  
  144.         {  
  145.             if(obj.value.length>maxLen)  
  146.             {  
  147.                 alert("【"+strNote+"】不能超过"+maxLen+"个字符!");  
  148.                 //obj.select();  
  149.                 return false;  
  150.             }  
  151.         }  
  152.         else if(minLen>0)  
  153.         {  
  154.             if(obj.value.length<minLen)  
  155.             {  
  156.                 alert("【"+strNote+"】不能少于"+minLen+"个字符!");  
  157.                 //obj.select();  
  158.                 return false;  
  159.             }  
  160.         }  
  161.         return true;  
  162.     }  
  163.     /** 
  164.      * 验证邮箱格式 
  165.      * @param canImpty:1,可空;0,必填 
  166.      */  
  167.     ShapeBase.isEmail=function(obj,canImpty) {  
  168.         if(canImpty==1)  
  169.         {  
  170.             if(obj.value=="")  
  171.             {  
  172.                 return true;  
  173.             }  
  174.         }  
  175.         if (obj.value.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)  
  176.         {  
  177.             return true;  
  178.         }  
  179.         else  
  180.         {  
  181.             alert("邮箱格式不正确!");  
  182.             //obj.select();  
  183.             return false;  
  184.         }  
  185.     }  
  186.     /**   
  187.      * 身份证15位编码规则:dddddd yymmdd xx p    
  188.      * dddddd:地区码    
  189.      * yymmdd: 出生年月日    
  190.      * xx: 顺序类编码,无法确定    
  191.      * p: 性别,奇数为男,偶数为女   
  192.      * <p />   
  193.      * 身份证18位编码规则:dddddd yyyymmdd xxx y    
  194.      * dddddd:地区码    
  195.      * yyyymmdd: 出生年月日    
  196.      * xxx:顺序类编码,无法确定,奇数为男,偶数为女    
  197.      * y: 校验码,该位数值可通过前17位计算获得   
  198.      * <p />   
  199.      * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]   
  200.      * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]    
  201.      * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )    
  202.      * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置   
  203.      *    
  204.      * @param canImpty:1,可空;0,必填 
  205.      */    
  206.     ShapeBase.checkIdCard = function(obj,canImpty) {     
  207.         idCard = ShapeBase.trim(obj.value.replace(/ /g, ""));     
  208.         if(canImpty==1)  
  209.         {  
  210.             if(obj.value=="")  
  211.             {  
  212.                 return true;  
  213.             }  
  214.         }  
  215.         if (idCard.length == 15)   
  216.         {     
  217.             return ShapeBase.isValidityBrithBy15IdCard(idCard);     
  218.         }   
  219.         else if (idCard.length == 18)   
  220.         {     
  221.             var a_idCard = idCard.split("");// 得到身份证数组     
  222.             if(ShapeBase.isValidityBrithBy18IdCard(idCard)&&ShapeBase.isTrueValidateCodeBy18IdCard(a_idCard))  
  223.             {     
  224.                 return true;     
  225.             }  
  226.             else   
  227.             {     
  228.                 return false;     
  229.             }     
  230.         }   
  231.         else   
  232.         {     
  233.             alert("身份证号长度必须是15位或18位!");  
  234.             return false;     
  235.         }     
  236.     }     
  237.     /**   
  238.      * 判断身份证号码为18位时最后的验证位是否正确   
  239.      * @param a_idCard 身份证号码数组   
  240.      * @return   
  241.      */    
  242.     ShapeBase.isTrueValidateCodeBy18IdCard=function(a_idCard)   
  243.     {     
  244.         var sum = 0; // 声明加权求和变量     
  245.         var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子     
  246.         var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X     
  247.         if (a_idCard[17].toLowerCase() == 'x')   
  248.         {     
  249.             a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作     
  250.         }     
  251.         for ( var i = 0; i < 17; i++)   
  252.         {     
  253.             sum += Wi[i] * a_idCard[i];// 加权求和     
  254.         }     
  255.         valCodePosition = sum % 11;// 得到验证码所位置     
  256.         if (a_idCard[17] == ValideCode[valCodePosition])   
  257.         {     
  258.             return true;     
  259.         }   
  260.         else   
  261.         {     
  262.             alert("身份证号码格式不正确!请确认");  
  263.             return false;     
  264.         }     
  265.     }   
  266.      /**   
  267.       * 验证18位数身份证号码中的生日是否是有效生日   
  268.       * @param idCard 18位书身份证字符串   
  269.       * @return   
  270.       */    
  271.     ShapeBase.isValidityBrithBy18IdCard=function(idCard18)  
  272.     {     
  273.         var year =  idCard18.substring(6,10);     
  274.         var month = idCard18.substring(10,12);     
  275.         var day = idCard18.substring(12,14);     
  276.         var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));     
  277.         // 这里用getFullYear()获取年份,避免千年虫问题     
  278.         if(temp_date.getFullYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day))  
  279.         {     
  280.             alert("身份证号格式不正确!出生日期有误!");  
  281.             return false;     
  282.         }  
  283.         else  
  284.         {     
  285.             return true;     
  286.         }     
  287.     }     
  288.     /**   
  289.      * 验证15位数身份证号码中的生日是否是有效生日   
  290.      * @param idCard15 15位书身份证字符串   
  291.      * @return   
  292.      */    
  293.     ShapeBase.isValidityBrithBy15IdCard=function(idCard15)  
  294.     {     
  295.         var year =  idCard15.substring(6,8);     
  296.         var month = idCard15.substring(8,10);     
  297.         var day = idCard15.substring(10,12);     
  298.         var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));     
  299.         // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法     
  300.         if(temp_date.getYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day))  
  301.         {     
  302.             alert("身份证号格式不正确!出生日期有误!");  
  303.             return false;     
  304.         }  
  305.         else  
  306.         {     
  307.             return true;     
  308.         }     
  309.     }     
  310.     /**   
  311.      * 通过身份证判断是男是女   
  312.      * @param idCard 15/18位身份证号码    
  313.      * @return 'female'-女、'male'-男   
  314.      */    
  315.     ShapeBase.getSexByIdCard=function(idCard)  
  316.     {     
  317.         idCard = ShapeBase.trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。     
  318.         if(idCard.length==15)  
  319.         {     
  320.             if(idCard.substring(14,15)%2==0)  
  321.             {     
  322.                 return 'female';     
  323.             }  
  324.             else  
  325.             {     
  326.                 return 'male';     
  327.             }     
  328.         }  
  329.         else if(idCard.length ==18)  
  330.         {     
  331.             if(idCard.substring(14,17)%2==0)  
  332.             {     
  333.                 return 'female';     
  334.             }  
  335.             else  
  336.             {     
  337.                 return 'male';     
  338.             }     
  339.         }  
  340.         else  
  341.         {     
  342.             return null;     
  343.         }     
  344.     }  
  345.     /**   
  346.      * 通过身份证获取出生日期 
  347.      * @param idCard 15/18位身份证号码    
  348.      * @return tempStr:出生日期  
  349.      */    
  350.     ShapeBase.getBirthdayByIdCard=function(idCard) {  
  351.         var tmpStr = "";  
  352.         var idDate = "";  
  353.         var tmpInt = 0;  
  354.         var strReturn = "";  
  355.       
  356.         idCard = ShapeBase.trim(idCard);  
  357.         if (idCard.length == 15)   
  358.         {  
  359.             tmpStr = idCard.substring(6, 12);  
  360.             tmpStr = "19" + tmpStr;  
  361.             tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6);  
  362.         }  
  363.         else   
  364.         {  
  365.             tmpStr = idCard.substring(6, 14);  
  366.             tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6);  
  367.         }  
  368.         return tmpStr;  
  369.     }  
  370.     /** 
  371.      * 日期验证 
  372.      * @param :obj,日期对象,值格式:YYYY-mm-dd 
  373.      */  
  374.     ShapeBase.checkDate=function(obj)  
  375.     {  
  376.         var strDate = obj.value;  
  377.         var result = strDate.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/);  
  378.         if(result==null)  
  379.         {  
  380.             alert("请输入正确的日期格式!,例如:2009-01-01。\r\n 或从时间列表中选择日期。");  
  381.             return false;  
  382.         }  
  383.         return true;  
  384.     }  
  385.     /** 
  386.      * 月份验证 
  387.      * @param :obj,月份对象,格式:YYYY-mm 
  388.      */  
  389.     ShapeBase.checkMon=function(obj)  
  390.     {  
  391.         var strDate = obj.value;  
  392.         var result = strDate.match(/^(19|20)\d{2}-((0[1-9])|(1[0-2]))$/);  
  393.         if(result==null)  
  394.         {  
  395.             alert("请输入正确的日期格式!如:2013-05");  
  396.             return false;  
  397.         }  
  398.         return true;  
  399.     }  
  400.     /** 
  401.      * 字符串处理 
  402.      * 去掉首尾空格 
  403.      */  
  404.     ShapeBase.trim=function(str)   
  405.     {     
  406.         return str.replace(/(^\s*)|(\s*$)/g, "");     
  407.     }    
  408.     /** 
  409.      * 重置表单 
  410.      * @para formseq:表单序号 
  411.      */  
  412.     ShapeBase.resetForm=function(formSeq)  
  413.     {  
  414.         var obj = null;     
  415.         for (var i = 0; i <= document.forms[0].elements.length - 1; i++)   
  416.         {       
  417.             obj = frm1.elements[i];          
  418.             if (obj.tagName == "INPUT" && obj.type == "text")   
  419.             {              
  420.                 obj.setAttribute("value""");          
  421.             }          
  422.             if (obj.tagName == "INPUT" && obj.type == "checkbox")   
  423.             {              
  424.                 obj.setAttribute("checked"false);          
  425.             }          
  426.             if (obj.tagName == "SELECT")   
  427.             {              
  428.                 obj.options[0].selected = true;         
  429.             }      
  430.         }  
  431.         return false;  
  432.     }  

阅读(588) | 评论(0) | 转发(0) |
0

上一篇:浅析Web开发人员最爱的几个PHP框架

下一篇:没有了

给主人留下些什么吧!~~