日期:2014-05-16  浏览次数:20363 次

JS控件:表单验证

下面的文章是复制http://godist.blog.sohu.com/26936043.html上的,留着以后会用到的

/*
?* 对页面表单进行验证的函数
?* 输入:form对象
?* 输出:true:验证通过;false:验证失败
?* 使用方法:
?* 1、在需要调用的页面中包含validateForm.js? 如:<SCRIPT language="JavaScript" SRC="../../../js/common/validateForm.js"></SCRIPT>
?* 2、在需要进行校验的输入框中添加 validator="验证类型" cnname="输入框名称" maxlength="长度"
?*??? 例如:<input name="FAVOURABLE_FEE" type="text" size="16" validator="float10_2Null" cnname="优惠费用" maxlength="13">
?*??? 目前支持的类型如下:
?*??????? 1.非空的日期型数据
?*??????? 2.可以空的日期型数据
?*??????? 3.非空的数字类型
?*??????? 4.可以为空的数字类型
?*??????? 5.非空的实数型
?*??????? 6.可以为空的实数型
?*??????? 7.非空的最大10位整数,2位小数的实数型
?*??????? 8.可以为空的最大10位整数,2位小数的实数型
?*??????? 9.非空的整型
?*??????? 10.可以为空的整型
?*??????? 11、非空字符串
?*??????? 12、可以为空字符串
?*??????? 13、非空合法的字符串:除去($*&'=<#>%^@~ )
?*??????? 14、可以为空的合法字符串:除去($*&'=<#>%^@~ )
?*??????? 15、不可以为空的Email
?*??????? 16、可以为空的Email
?* 3、在提交数据的地方添加调用 validateForm(form对象) 如:validateForm(form1)
*/

function validateForm(theForm)
      {?? //对页面表单进行验证的函数
??
??//定义正则表达式
??var PatternsDict=new Object();
??//1.非空的日期型数据
??PatternsDict.date = /^[1-2]\d{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[0-1])$/;
??//2.可以空的日期型数据
??PatternsDict.dateNull = /(^[1-2]\d{3}-(0?[1-9]|1[0-2]|3[0-1])-(0?[1-9]|[12][0-9]|3[0-1])$)|(^[1-2]\d{3}-([1-9]|1[0-2]|3[0-1])-([1-9]|[12][0-9]|3[0-1])$)|(^$)/;
??//3.非空的数字类型
??PatternsDict.num= /^\d+$/;
??//4.可以为空的数字类型
??PatternsDict.numNull = /^\d*$/;
??//5.非空的实数型
??PatternsDict.float= /^(0|\-?[1-9]+[0-9]*|\-?[1-9]+[0-9]*\.\d+|\-?[0-9]*\.\d+)$/;
??//6.可以为空的实数型
??PatternsDict.floatNull = /(^(0|\-?[1-9]+[0-9]*|\-?[1-9]+[0-9]*\.\d+|\-?[0-9]*\.\d+)$)|(^$)/;
??//7.非空的最大10位整数,2位小数的实数型
??PatternsDict.float10_2= /^(0|\-?[1-9]{1}\d{0,9}|\-?[1-9]{1}\d{0,9}\.\d{1,2}|\-?\d{0,9}\.\d{1,2})$/;
??//8.可以为空的最大10位整数,2位小数的实数型
??PatternsDict.float10_2Null = /(^(0|\-?[1-9]{1}\d{0,9}|\-?[1-9]{1}\d{0,9}\.\d{1,2}|\-?\d{0,9}\.\d{1,2})$)|(^$)/;
??//9.非空的整型
??PatternsDict.int= /^(0|\-?[1-9]{1}\d*)$/;
??//10.可以为空的整型
??PatternsDict.intNull = /(^(0|\-?[1-9]{1}\d*)$)|(^$)/;
??//11、非空字符串
??PatternsDict.string = /^[\S\s]+$/;
??//12、可以为空字符串
??PatternsDict.stringNull = /^[\S\s]*$/;
??//13、非空合法的字符串:除去($*&'=<#>%^@~ )
??PatternsDict.stringLegal = /^[^\$\*&'=<#>%\^@~\s]+$/;
??//14、可以为空的合法字符串:除去($*&'=<#>%^@~ )
??PatternsDict.stringLegalNull = /(^[^\$\*&'=<#>%\^@~\s]+$)|(^$)/;
??//15、不可以为空的Email
??PatternsDict.email = /^[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+@[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+(\.[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+)+$/;
??//16、可以为空的Email
??PatternsDict.emailNull = /(^[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+@[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+(\.[\-!#\$%&'\*\+\\\.\/0-9=\?A-Z\^_`a-z{|}~]+)+$)|(^$)/;
??
??
        var elArr = theForm.elements; //elArr数组获得全部表单元素
        var val;
        var vname = "";
        for(var i = 0; i < elArr.length; i++)
        with(elArr[i])
        {               //循环表单中每一个元素
          var v = elArr[i].validator; //获取validator属性值
          var cnname=elArr[i].cnname; //获取cnname属性值
????? var maxlength=elArr[i].maxlength; //获得长度
          if(!v) continue; //如没有validator属性值,则跳出本次循环
          if(!cnname) continue;
          var thePat = PatternsDict[v]; //选择对应的正则表达式
          var gotIt = thePat.exec(value); //运行对比
          if(!gotIt) //如果符合相应的正则表达式(为true),则转为false,否则执行该if块。
          {
              if (v=="date") vname="日期(例如:2005-01-02)";
              if (v=="dateNull") vname="日期(例如:2005-01-02),可以留空不填";
              if (v=="num") vname="非空的数字类型值";
?????? if (v=="numNull") vname="数字类型值";