求通用的js  验证框架
要求:参数是控件名称,控件正则表达试

解决方案 »

  1.   

    function validateForm() 
    {
    var i, j, voldObj, vfObj, vObj, vType, vCon, eoldNum=0 ,eNum = 0, eMsg = '', cItemNum = 0, fErrMsg='', re , msg=0;
    vfObj = new Array();
    var args = validateForm.arguments;
    for (i = 0; i < (args.length-2); i += 3)
    {
    vObj = args[i];
    vType = args[i+1];
    vCon = args[i+2];

    this.ClearState(vObj); // 清除红色背景
    eoldNum = eNum;

    if (voldObj!=vObj)
    {
    switch (vType)
    {
    case 'FitRegEx':
    re = vCon;
    if ( vObj.value.search( re ) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的值不符合要求' );
    }
    break;
    case 'FitRegExnull':
    if (vObj.value!='')
    {
    re = vCon;
    if ( vObj.value.search( re ) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的值不符合要求' );
    }
    }
    break;


    case 'AntiRegEx':
    re = vCon;
    if ( vObj.value.search( re ) >= 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的值不符合要求' );
    }
    break;
    case 'NotBlank':
    if ( vObj.value == '' )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'没有填写' );
    }
    else
    {
    re = /^[\s]+$/;
    if ( vObj.value.search(re) == 0 )
    {
      eNum ++;
      eMsg += genErrMsg( eNum,vObj,'没有填写' );
    }
    }
    break;
    case 'IsRegID':
    if ( vObj.value != '' )
    {
    re = /^[a-zA-Z]+[a-zA-Z0-9_.-]*$/;
    if ( vObj.value.search(re) != 0 )
    {
      eNum ++;
      eMsg += genErrMsg( eNum,vObj,'用户名不合法(以字母开头,可以输入字母、数字、下划线、点、减号)!' );
    }
    }
    break;
    case 'IsNumeric':
    if ( isNaN(vObj.value) || vObj.value == '' )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是数字' );
    }
    break;

    case 'IsInt':
    re = /^[0-9]+$/;
    if ( vObj.value.search(re) != 0 || (vObj.value.length>1 && vObj.value.substring(0,1) == 0) )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'必须输入半角数字[0-9]' );
    }
    break;
    case 'IsNumericNull':
    if ( isNaN(vObj.value))
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是数字' );
    }
    break;

    case 'IsIntNull':
    re = /^[0-9]+$/;
    if(vObj.value!='')
    {
    if ( vObj.value.search(re) != 0 || (vObj.value.length>1 && vObj.value.substring(0,1) == 0) )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'必须输入半角数字[0-9]' );
    }
    }
    break;
    case 'IsEmail':
    re = /^[a-zA-Z\.0-9_-]+@[a-zA-Z\.0-9_-]+$/;
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效Email地址' );
    }
    break;
    case 'IsEmailNULL':
        if (vObj.value!='')
        {
    re = /^[a-zA-Z\.0-9_-]+@[a-zA-Z\.0-9_-]+$/;
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效Email地址' );
    }
    }
    break;
    case 'IsDate':
    if ( !IsDate(vObj.value,vCon) )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效日期' );
    }
    break;
    case 'IsDateNull':
    if(vObj.value!='')
    {
    if ( !IsDate(vObj.value,vCon) )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效日期' );
    }
    }
    break;
    case 'CompareDate':
    vc_date1 =  vCon.substring( 0,vCon.indexOf("to"));
    vc_date2 =  vCon.substring( vCon.indexOf("to")+2 );
    var d1=toDate(vc_date1,'yyyy-mm-dd');
    var d2=toDate(vc_date2,'yyyy-mm-dd');
    if(vc_date1!='' && vc_date2!='')
    {
    var d1=toDate(vc_date1,'yyyy-mm-dd');
    var d2=toDate(vc_date2,'yyyy-mm-dd');
    if(d1>d2)
    {
    eNum++;
    eMsg += genErrMsg( eNum,vObj,'起始日期大于截止日期' );
    }
    }
    break;

    case 'CompareStringDate':
    vc_date1 =  vCon.substring( 0,vCon.indexOf("to"));
    vc_date2 =  vCon.substring( vCon.indexOf("to")+2 );
    if(vc_date1!='' && vc_date2!='')
    {
    if(vc_date1>vc_date2)
    {
    eNum++;
    eMsg += genErrMsg( eNum,vObj,'起始时间大于截止时间' );
    }
    }
    break;
    case 'IsZip':
    re = /^[1-9]\d{5}$/;
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效邮政编码' );
    }
    break;
    case 'IsZip1':
    re = /^[0-9-]+$/;
    if(vObj.value!='')
    {
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效邮政编码' );
    }
    }
    break;
    case 'IsChinese':
    re = /^[\u0391-\uFFE5]+$/;
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是有效汉字' );
    }
    break;
    case 'IsPlainText':
    re = /<[a-zA-Z]+[^>]*>/;
    if ( vObj.value.search(re) >= 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'不是纯文本,含有HTML标签' );
    }
    break;
    case 'LengthRange':
    vc_min = parseFloat( vCon.substring( 0,vCon.indexOf("to") ) );
    vc_max = parseFloat( vCon.substring( vCon.indexOf("to")+2 ) );
    if ( vObj.value.length < vc_min || vObj.value.length > vc_max )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的长度不在指定范围内('+vc_min+'-'+vc_max+')' );
    }
    break;
    case 'NumericRange':
    vc_min = parseFloat( vCon.substring( 0,vCon.indexOf("to") ) );
    vc_max = parseFloat( vCon.substring( vCon.indexOf("to")+2 ) );
    if ( vObj.value < vc_min || vObj.value > vc_max )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的值不在指定范围内' );
    }
    break;
    case 'IsEqualTo':
    if ( vObj.value != vCon.value )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'与第一输入的值不相等');
    }
    break;
    case 'IsPassEqual':
    if ( vObj.value != vCon.value )
    {
    var str ="两次密码不一致";
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,str );
    }
    break;
    case 'IsEqualOldPwd':
    if ( vObj.value != vCon.value )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'与旧密码不相等');
    }
    break;
    case 'CheckLimit':
    vc_min = parseFloat( vCon.substring( 0,vCon.indexOf("to") ) );
    vc_max = parseFloat( vCon.substring( vCon.indexOf("to")+2 ) );
    if ( vc_max == -1 )//vc_max=-1表示没有上限
    {
    vc_max = vObj.length;
    }
    for (j = 0;j < vObj.length;j ++)
    {
    if ( vObj[j].checked )
    {
    cItemNum ++;
    }
    }
    if ( cItemNum < vc_min || cItemNum > vc_max )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj[0],'的选中项目数不在指定范围内' );
    }
    break;
    case 'SelectValid':
    if ( vObj.value == '' )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'没有选中有效项' );
    }
    break;
    case 'SelectValid1':
    if ( vObj.value == '0' )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'没有选中有效项' );
    }
    break;
    case 'IsURL':
    if ( vObj.value != '' )
    {
    re = /^[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
    //re=/^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$/;
    if ( vObj.value.search(re) != 0 )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'URL地址不正确(www.sohu.com)' );
    }
    }
    break;
      

  2.   

    case 'VFile'://验证文件
    if ( vObj.value != '' )
    {
    var fname=vObj.value.toLowerCase();
    var f=fname.substring(fname.length, fname.length-3);

    if ( f!="gif"&&f!="jpg" )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'文件格式不正确,仅限(gif,jpg)!' );
    }
    }
    break;
    case 'CheckValid':
           var flag=0;
       for (var i=0;i<document.forms[0].elements.length;i++)
        {
           var e1=document.forms[0].elements[i];
           if (e1.checked==true&&e1.name!='s0405')
           {
           for (var j=0;j<document.forms[0].elements.length;j++)
       {
           var e2=document.forms[0].elements[j];
           if (e2.value==e1.value&&e2.name=='s0405'&&e2.checked!=true)
           {
              flag=1;
       }
       }
       }
        }
        if (flag==1)
        {
                               msg=1;
        }
        break;
    case 'LengthRange':
    vc_min = parseFloat( vCon.substring( 0,vCon.indexOf("to") ) );
    vc_max = parseFloat( vCon.substring( vCon.indexOf("to")+2 ) );
    if ( vObj.value.length < vc_min || vObj.value.length > vc_max )
    {
    eNum ++;
    eMsg += genErrMsg( eNum,vObj,'的长度不在指定范围内('+vc_min+'-'+vc_max+')' );
    }
    break;
                case 'IsIdCardNo':
                     var v15 = /^\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d$/;
                     var v18 = /^\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d[1-9x]$/                  if (vObj.value.length == 15) 
                    {
                        if (!vObj.value.match(v15)) 
                         {
                             eNum++;
                             eMsg += genErrMsg(eNum, vObj, '身份证号格式不正确');
                         }
                     }
                     else if (vObj.value.length == 18)
                      {
                          if (!vObj.value.match(v18))
                          {
                              eNum++;
                              eMsg += genErrMsg(eNum, vObj, '身份证号格式不正确');
                          }
                      } 
                    else {
                        eNum++;
                        eMsg += genErrMsg(eNum, vObj, '身份证号格式不正确');
                         }
                     break;
    }
    vfObj[eoldNum] = vObj;
    }
    if (eoldNum < eNum)
    {
    voldObj = vObj;
    }

    }
    if ( eNum )
    {
    for (i=0;i<eNum;i++)
       vfObj[i].style.color = "red";  //改变错误处的颜色
       
    fErrMsg = '抱歉,您提交的数据存在 ' + eNum + ' 处错误:\n';
    fErrMsg += '==============================\n';
    fErrMsg += eMsg;
    fErrMsg += '==============================\n';
    fErrMsg += '\n请修改后再提交,谢谢!';
    alert( fErrMsg );
    vfObj[0].focus();
    return false;
    }
    if (msg)
    {
    fErrMsg = '抱歉,您提交的数据存在错误:\n';
    fErrMsg += '==============================\n';
    fErrMsg += '\n有增,删,改功能必须有查询功能!\n\n';
    fErrMsg += '==============================\n';
    fErrMsg += '\n请修改后再提交,谢谢!';
    alert( fErrMsg );
        return false;
    }
    }
      

  3.   

    //Generate Error Message
    function genErrMsg(eTimes,vObj,eType)
    {
    eMsg = eTimes + '. [ ' + vObj.title + ' ] ' + eType + '。\n';
    return eMsg;
    }//Clear old station
    function ClearState(elem)
    {
    with(elem)
    {
    if(style.color == "red")
    style.color = "";
    }
    }
    // 判断是否为设定格式的日期
    function IsDate(op, formatString)
    {
    var m, year, month, day;
    switch(formatString)
    {
    case "yyyy-mm-dd" :
    m = op.match(new RegExp("^\\s*((\\d{4})|(\\d{2}))([-])(\\d{2})\\4(\\d{2})\\s*$"));
    if(m == null ) return false;
    day = m[6];
    month = m[5];
    year =  (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
    break;
    default :
    break;
    }
    var newdate = year+'/'+month+'/'+day;
    var date = new Date(newdate);
        return (typeof(date) == "object" && year == date.getFullYear() && (month-1) == date.getMonth() && day == date.getDate());
    }
    function GetFullYear(y)
    {
    return ((y<30 ? "20" : "19") + y)|0;
    }//
    //获得日期
    function toDate(op, formatString)
    {
    var m, year, month, day;
    switch(formatString)
    {
    case "yyyy-mm-dd" :
    m = op.match(new RegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$"));
    if(m == null ) return false;
    day = m[6];
    month = m[5];
    year =  (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
    break;
    default :
    break;
    }
    var newdate = year+'/'+month+'/'+day;
    var date = new Date(newdate);
        return date;
    }