用正则表达式和javascript对表单进行全面验证

 
  1. 代码:<!--
  2. 使用时请将下面的javascript代码存到一个单一的js文件中。
  3. 1、表单要求
  4.  <form name="formname" onSubmit="return validateForm(this)"></form>
  5.  将对表单中的所有以下类型的域依次验证,所有验证是去除了前导和后缀空格的,要注意是区分大小写的。
  6. 2、空值验证
  7.  表单中任意域加上emptyInfo属性将对此域是否为空进行验证(可以和最大长度验证/一般验证方式同时使用)。
  8.  无此属性视为此域允许空值。
  9.   如:<input type="text" name="fieldNamename" emptyInfo="字段不能为空!">
  10. 3、最大长度验证(可以和空值验证、一般验证方式同时使用):
  11.  <input type="text" name="fieldNamename" maxlength="20" lengthInfo="最大长度不能超过20!">
  12.  或,<textarea maxlength="2000" lengthInfo="最大长度不能超过2000!">
  13. 3、一般验证方式(不对空值做验证):
  14.   如:<input type="text" validator="^(19|20)[0-9]{2}$" errorInfo="不正确的年份!" >
  15. 4、标准验证(不与其它验证方式同时使用):
  16.  全部通过<input type="hidden">来实现,并且不需要name属性以免提交到服务器。
  17.   4.1、合法日期验证:
  18.   <input type="text" name="yearfieldName" value="2004">注:这里也可以是<select name="yearfieldName"></select>,以下同
  19.   <input type="text" name="monthfieldName" value="02">
  20.   <input type="text" name="dayfieldName" value="03">
  21.   <input type="hidden" validatorType="DateGroup" year="yearfieldName" month="monthfieldName" day="dayfieldName" errorInfo="不正确的日期!">
  22.   yearfieldName、monthfieldName、dayfieldName分别为年月日字段,月和日可以是两位(MM)或一位格式(M),
  23.   此处不对每个字段分别检验(如果要检验,请在年月日三个域分别使用前面的一般验证方式),只对日期的最大值是否合法检查;
  24.  4.2、日期格式验证(请注意,此验证不对日期是否有效进行验证,还未找到从格式中得到年月日数据的方法^_^):
  25.   <input type="text" name="datefieldName" value="2003-01-03 21:31:00">
  26.   <input type="hidden" validatorType="Date" fieldName="datefieldName"; format="yyyy-MM-dd HH:mm:ss" errorInfo="不正确的日期!">
  27.   其中格式仅对y、M、d、H、m、s进行支持(其它字符视为非时间的字符)
  28.  4.3、列表验证:
  29.   检验列表(checkbox、redio、select)是否至少选中了一条记录(对select主要用于多项选择)
  30.   <input type="checkbox" name="checkbox1">
  31.   <input type="hidden" validatorType="Checkbox" fieldName="checkbox1" errorInfo="请至少选中一条记录!">
  32.   其中validatorType可以是Checkbox、R、Select;
  33.   对于一个select表单,如果要求选择一条不能是第一条的记录,请用下列方式:
  34.   <select name="select1" emptyInfo="请选择一个选项!">
  35.   <option value="">==请选择==</option>
  36.   <option value="1">1</option>
  37.   <select>
  38.  4.4、Email验证:
  39.   <input type="text" name="email">
  40.   <input type="hidden" fieldName="email" validatorType="Email" separator="," errorInfo="不正确的Email!">
  41.   其中separator为可选项,表示输入多个email时的分隔符(无此选项只能是一个地址)
  42.  4.5、加入其它javascript操作:
  43.  <script type="text/javascript">
  44.   function functionname(){
  45.     自定义方法
  46.   }
  47.  </script>
  48.  表单中加入<input type="hidden" validatorType="javascript" functionName="functionname">(此时emptyInfo等属性无效)
  49.   时将调用function属性中指定的javascript方法(要求方法返回truefalse,返回false将不再验证表单,也不提交表单)。
  50. 5、在表单通过验证提交前disable一个按钮(也可将其它域disable,不能与其它验证同在一个域),不要求按钮是表单中的最后一个
  51.  <input type="button" name="提交" validatorType="disable">
  52. 6、不验证表单
  53.   <input type="hidden" name="validate" value="0" functionName="functionname">
  54.  当validator域值为0时不对表单进行验证,直接提交表单或执行指定function并返回true后提交表单
  55.  functionName为可选
  56. -->
  57. <script type="text/javascript">
  58. function getStringLength(str){
  59.   var endvalue=0;
  60.   var sourcestr=new String(str);
  61.   var tempstr;
  62.   for (var strposition = 0; strposition < sourcestr.length; strposition ++) {
  63.     tempstr=sourcestr.charAt(strposition);
  64.     if (tempstr.charCodeAt(0)>255 || tempstr.charCodeAt(0)<0) {
  65.       endvalue=endvalue+2;
  66.     } else {
  67.       endvalue=endvalue+1;
  68.     }
  69.   }
  70.   return(endvalue);
  71. }
  72. function trim(str){
  73.   if(str==nullreturn "";
  74.   if(str.length==0) return "";
  75.   var i=0,j=str.length-1,c;
  76.   for(;i<str.length;i++){
  77.     c=str.charAt(i);
  78.     if(c!=' 'break;
  79.   }
  80.   for(;j>-1;j--){
  81.     c=str.charAt(j);
  82.     if(c!=' 'break;
  83.   }
  84.   if(i>j) return "";
  85.   return str.substring(i,j+1); 
  86. }
  87. function validateDate(date,format,alt){
  88.   var time=trim(date.value);
  89.   if(time==""return;
  90.   var reg=format;
  91.   var reg=reg.replace(/yyyy/,"[0-9]{4}");
  92.   var reg=reg.replace(/yy/,"[0-9]{2}");
  93.   var reg=reg.replace(/MM/,"((0[1-9])|1[0-2])");
  94.   var reg=reg.replace(/M/,"(([1-9])|1[0-2])");
  95.   var reg=reg.replace(/dd/,"((0[1-9])|([1-2][0-9])|30|31)");
  96.   var reg=reg.replace(/d/,"([1-9]|[1-2][0-9]|30|31))");
  97.   var reg=reg.replace(/HH/,"(([0-1][0-9])|20|21|22|23)");
  98.   var reg=reg.replace(/H/,"([0-9]|1[0-9]|20|21|22|23)");
  99.   var reg=reg.replace(/mm/,"([0-5][0-9])");
  100.   var reg=reg.replace(/m/,"([0-9]|([1-5][0-9]))");
  101.   var reg=reg.replace(/ss/,"([0-5][0-9])");
  102.   var reg=reg.replace(/s/,"([0-9]|([1-5][0-9]))");
  103.   reg=new RegExp("^"+reg+"$");
  104.   if(reg.test(time)==false){//验证格式是否合法
  105.     alert(alt);
  106.     date.focus();
  107.     return false;
  108.   }
  109.   return true;
  110. }
  111. function validateDateGroup(year,month,day,alt){
  112.   var array=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  113.   var y=parseInt(year.value);
  114.   var m=parseInt(month.value);
  115.   var d=parseInt(day.value);
  116.   var maxday=array[m-1];
  117.   if(m==2){
  118.     if((y%4==0&&y%100!=0)||y%400==0){
  119.       maxday=29;
  120.     }
  121.   }
  122.   if(d>maxday){
  123.     alert(alt);
  124.     return false;
  125.   }
  126.   return true;
  127. }
  128. function validateCheckbox(obj,alt){
  129.   var rs=false;
  130.   if(obj!=null){
  131.     if(obj.length==null){
  132.       return obj.checked;
  133.     }
  134.     for(i=0;i<obj.length;i++){
  135.       if(obj[i].checked==true){
  136.         return true;
  137.       }
  138.     }
  139.   }
  140.   alert(alt);
  141.   return rs;
  142. }
  143. function validateRadio(obj,alt){
  144.   var rs=false;
  145.   if(obj!=null){
  146.     if(obj.length==null){
  147.       return obj.checked;
  148.     }
  149.     for(i=0;i<obj.length;i++){
  150.       if(obj[i].checked==true){
  151.         return true;
  152.       }
  153.     }
  154.   }
  155.   alert(alt);
  156.   return rs;
  157. }
  158. function validateSelect(obj,alt){
  159.   var rs=false;
  160.   if(obj!=null){
  161.     for(i=0;i<obj.options.length;i++){
  162.       if(obj.options[i].selected==true){
  163.         return true;
  164.       }
  165.     }
  166.   }
  167.   alert(alt);
  168.   return rs;
  169. }
  170. function validateEmail(email,alt,separator){
  171.   var mail=trim(email.value);
  172.   if(mail==""return;
  173.   var em;
  174.   var myReg = /^[_a-z0-9]+@([_a-z0-9]+/.)+[a-z0-9]{2,3}$/;
  175.   if(separator==null){
  176.     if(myReg.test(email.value)==false){
  177.       alert(alt);
  178.       email.focus();
  179.       return false;
  180.     }
  181.   }
  182.   else{
  183.     em=email.value.split(separator);
  184.     for(i=0;i<em.length;i++){
  185.       em[i]=em[i].trim();
  186.       if(em[i].length>0&&myReg.test(em[i])==false){
  187.         alert(alt);
  188.         email.focus();
  189.         return false;
  190.       }
  191.     }
  192.   }
  193.   return true;
  194. }
  195. function validateForm(theForm){// 若验证通过则返回true
  196.   var disableList=new Array();
  197.   var field = theForm.elements; // 将表单中的所有元素放入数组
  198.   for(var i = 0; i < field.length; i++){
  199.     var vali=theForm.validate;
  200.  if(vali!=null){
  201.    if(vali.value=="0"){
  202.      var fun=vali.functionName;
  203.   if(fun!=null){
  204.     return eval(fun+"()");
  205.   }
  206.   else{
  207.     return true;
  208.   }
  209.    }
  210.  }
  211.     var empty=false;
  212.     var value=trim(field[i].value);
  213.     if(value.length==0){//是否空值
  214.       empty=true;
  215.     }
  216.     var emptyInfo=field[i].emptyInfo;//空值验证
  217.     if(emptyInfo!=null&&empty==true){
  218.       alert(emptyInfo);
  219.       field[i].focus();
  220.       return false;
  221.     }
  222.     var lengthInfo=field[i].lengthInfo;//最大长度验证
  223.     if(lengthInfo!=null&&getStringLength(value)>field[i].maxLength){
  224.       alert(lengthInfo);
  225.       field[i].focus();
  226.       return false;
  227.     }
  228.     var validatorType=field[i].validatorType;
  229.     if(validatorType!=null){//其它javascript
  230.       var rs=true;
  231.       if(validatorType=="javascript"){
  232.         eval("rs="+field[i].functionName+"()");
  233.         if(rs==false){
  234.           return false;
  235.         }
  236.         else{
  237.           continue;
  238.         }
  239.       }
  240.       else if(validatorType=="disable"){//提交表单前disable的按钮
  241.         disableList.length++;
  242.         disableList[disableList.length-1]=field[i];
  243.         continue;
  244.       }
  245.       else if(validatorType=="Date"){
  246.         rs=validateDate(theForm.elements(field[i].fieldName),field[i].format,field[i].errorInfo);
  247.       }
  248.       else if(validatorType=="DateGroup"){
  249.         rs=validateDateGroup(theForm.elements(field[i].year),theForm.elements(field[i].month),theForm.elements(field[i].day),field[i].errorInfo);
  250.       }
  251.       else if(validatorType=="Checkbox"){
  252.         rs=validateCheckbox(theForm.elements(field[i].fieldName),field[i].errorInfo);
  253.       }
  254.       else if(validatorType=="Radio"){
  255.         rs=validateRadio(theForm.elements(field[i].fieldName),field[i].errorInfo);
  256.       }
  257.       else if(validatorType=="Select"){
  258.         rs=validateSelect(theForm.elements(field[i].fieldName),field[i].errorInfo);
  259.       }
  260.       else if(validatorType=="Email"){
  261.         rs=validateEmail(theForm.elements(field[i].fieldName),field[i].errorInfo);
  262.       }
  263.       else{
  264.         alert("验证类型不被支持, fieldName: "+field[i].name);
  265.         return false;
  266.       }
  267.       if(rs==false){
  268.         return false;
  269.       }
  270.     }
  271.     else{//一般验证
  272.       if(empty==false){
  273.         var v = field[i].validator; // 获取其validator属性
  274.         if(!v) continue;            // 如果该属性不存在,忽略当前元素
  275.         var reg=new RegExp(v);
  276.         if(reg.test(field[i].value)==false){
  277.           alert(field[i].errorInfo);
  278.           field[i].focus();
  279.           return false;
  280.         }
  281.       }
  282.     }
  283.   }
  284.   for(i=0;i<disableList.length;i++){
  285.     disableList[i].disabled=true;
  286.   }
  287.   return true;
  288. }
  289. </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值