自己整理的一些表单验证的通用方法(javascript)

2007 年 04 月 12 日 下午 2:50 | | 阅读次数 : 7,675 次 | 网站设计 | ,


Please Note: This post is over a year old, any information within it may be out-of-date.

     在以前很多的web开发中,用到的表单验证也非常多,所以把以前写的整理了一下,列出了一个通用的表单验证脚本。以后的开发就可以不用再麻烦的去找了,带来了不少的方便。
   如果还有什么需要补充的地方,希望和大家讨论。shy
     本站提供了下载。

/********************************************************
  auther   博爱老头
  date     2006-12-25
*********************************************************/

function checkLength(obj,minLen,maxLen,objName){
/********************************************************
  检查输入的值的长度是否合法。合法则返回true,非法返回false
  obj:     需要检验的参数
  minLen:  最小长度。若为-1,表示不限制最小长度
  maxLen:  最大长度。若为-1,表示不限制最大长度
  objName: 业务名称
*********************************************************/

 var objValue = trim(eval(obj).value);
 var len = objValue.length;
 if(maxLen!=-1){
   if(len>maxLen){
     alert(objName+”的长度不能大于”+maxLen);
     eval(obj).select();
     return false;
   }
 }
 
 if(minLen!=-1){
   if(len      alert(objName+”的长度不能小于”+minLen);
     eval(obj).select();
     return false;
   }
 }
 
 return true;  
}

function trim(val){
/************************************
去掉一个字符串的前后空格,
返回去掉空格后的字符串
************************************/

   var v = val;
 
   //去掉前后空格
   while(v.length>0 && v.charAt(0)==” “){
      v = v.substring(1);
   }
   while(v.length>0 && v.charAt(v.length-1)==” “){
      v = v.substring(0,v.length-1);
   }
   return v;
}

function checkUsername(obj){
/************************************
检查用户名是否合法,合法则返回true,否则返回false
用户名只能由字母、数字、下划线、中划线组成,且只能以字母开头
*************************************/
 var username = eval(obj).value;
 username = trim(username);
 var ch;
 var len = username.length;
 
 if(len<4 || len>20){
   alert(“用户名的长度必须在4至20之间”);
   eval(obj).select();
   return false;
 }
 
 for(var i=0;i    ch = username.charAt(i);
   if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z') || (ch>='0' && ch<='9') || ch=='_' || ch=='-'){
     continue;
   }else{   //非法字符
     alert(“用户名只能由字母、数字、下划线组成”);
     eval(obj).select();
     return false;
   }
 }//end for i
 
 ch = username.charAt(0);
 if(!((ch>='A' && ch<='Z') || (ch>='a' && ch<='z'))){
     alert(“用户名只能以字母开头”);
     eval(obj).select();
     return false;
 }

 return true;
}

function checkEmpty(obj,objName){
/************************************
为空,则表示检查不通过,返回false,不为空,返回true;
*************************************/
   var s=eval(obj).value;
   s = trim(s);
 
  if(s.length==0){
    alert(objName+”不能为空,请输入!”);
    eval(obj).focus();
    return false;
  }
 
  return true;
}

function checkDataType(obj,objType,objName){
   /*/////////////////////////////////////////////////
   obj:         String,需要检验的参数
   objType:    int,参数值的正确类型 (1:字符串;2:整数;3:数值;4:日期(yyyy-mm-dd);5:邮件地址;)
   objName:     String,参数的业务名称
   *//////////////////////////////////////////////////
   
   var objValue = eval(obj).value;
   
   objValue = trim(objValue);
   
   switch (objType){
     case 2:
       //检查是否数字
       if (!isInt(objValue)){
         alert(“错误!” + objName + “必须为整数,请重新输入!”);
         eval(obj).select();
         return false;
       }
       break;
     case 3:
       //检查是否数值
       if (!isNumber(objValue)){
         alert(“错误!” + objName + “必须为数值,请重新输入!”);
         eval(obj).select();
         return false;
       }
       break;
     case 4:
       //检查是否为日期
       if (!isDate(objValue)){
         alert(“错误!” + objName + “必须为日期,且格式如'1977-11-09',请重新输入!”);
         eval(obj).select();
         return false;
       }
       break;
     case 5:
       //检查是否为邮件地址
       if(checkEmail(objValue)==false){
         alert(“错误!请在” + objName + “输入有效的邮件地址!”);
         eval(obj).select();
         return false;
       }
       
       break;
     case 8:
       //检查是否为日期时间格式
       if (isDateTime(objValue) == false){
         alert(“错误!” + objName + “必须为日期,且格式如'1977-11-09 21:23:45',请重新输入!”)
         eval(obj).select();
         return false;
       } else
         return true;
       break;
   }
 }

function isNumber(val){
/************************************
判断传入的变量是否为数字,是则返回true
*************************************/  

 //去掉前后空格
     var v = trim(val);      
     
     if(v.length==0){
       return false;
     }
     
     
     var num = parseFloat(v);
     if(isNaN(num)){
       return false;
     }else{
       return true;
     }
}

function isInt(val){
/************************************  
判断传入的变量是否为整数,是则返回true
************************************/
   //去掉前后空格
   var v = trim(val);
   
   
   if(v.length==0){
     return false;
   }
   
   for(var i=0;i      if(v.charAt(i)=='.'){
       return false;
     }
   }
       
   var num = parseInt(v);
   if(isNaN(num)){
     return false;
   }else{
       return true;
   }
}

function isDate(DateString){
/************************************
验证是否为日期类型,是则返回true
只有格式如同以下的字符串才是日期时间型:'2004-04-22'
************************************/

 var v = trim(DateString);
 
 if (v==null) return true;
 if (v == “”) return true;
 var Dilimeter;
 Dilimeter = '-';
 var tempy='';
 var tempm='';
 var tempd='';
 var tempArray;
 if (v.length<8 && v.length>10)
   return false;
 tempArray = v.split(Dilimeter);
 if (tempArray.length!=3)
   return false;
 if (tempArray[0].length==4)
 {
   tempy = tempArray[0];
   tempd = tempArray[2];
 }
 else
 {
   tempy = tempArray[2];
   tempd = tempArray[1];
 }
 tempm = tempArray[1];
 var tDateString = tempy + '/'+tempm + '/'+tempd+' 8:0:0';
 var tempDate = new Date(tDateString);
 if (isNaN(tempDate))
   return false;
 while (tempm.substring(0,1) == “0”)
     tempm = tempm.substring(1);
   while (tempd.substring(0,1) == “0”)
     tempd = tempd.substring(1);
 if (((tempDate.getUTCFullYear()).toString()==tempy) && (tempDate.getMonth()==parseInt(tempm)-1) && (tempDate.getDate()==parseInt(tempd)))
   return true;
 else
   return false;
}

function isDateTime(DateTimeString){
/************************************
验证是否为日期时间类型,是则返回true
只有格式如同以下的字符串才是日期时间型:'2004-04-22 15:53:27'
************************************/
   
   //去掉前后空格
     var v = trim(DateTimeString);

       if (v == null) return true;
       if (v == “”) return true;
       var timeStart = v.indexOf(” “);
       var DateString = v.substring(0,timeStart);

       if (DateString==null) return false;
       var Dilimeter;
       Dilimeter = '-';
       var tempy='';
       var tempm='';
       var tempd='';
       var tempArray;
       if (DateString.length<8 && DateString.length>10){
               return false;
               }
       tempArray = DateString.split(Dilimeter);
       if (tempArray.length!=3)
       {
               return false;
               }
       if (tempArray[0].length==4)
       {
               tempy = tempArray[0];
               tempd = tempArray[2];
       }
       else
       {
               tempy = tempArray[2];
               tempd = tempArray[1];
       }
       tempm = tempArray[1];

       var TimeString = v.substring(timeStart + 1);
       Dilimeter = ':';
       var temph='';
       var tempmi='';
       var temps='';
       var tempArray1;
       if (TimeString.length<5 && TimeString.length>8){
               return false;
               }
       tempArray1 = TimeString.split(Dilimeter);
       if (tempArray1.length!=3){
               return false;
               }
       temph = tempArray1[0];
       tempmi = tempArray1[1];
       temps = tempArray1[2];
       var DateString = tempy + '/'+tempm + '/'+tempd+' ' + temph + ':' + tempmi + ':' + temps;
       var tempDate = new Date(DateString);
       if (isNaN(tempDate)){
               return false;
               }

       while (tempm.substring(0,1) == “0”)
               tempm = tempm.substring(1);
       while (tempd.substring(0,1) == “0”)
               tempd = tempd.substring(1);

       if (temph.substring(0,1) == “0”)
               temph = temph.substring(1);
       if (tempmi.substring(0,1) == “0”)
               tempmi = tempmi.substring(1);
       if (temps.substring(0,1) == “0”)
               temps = temps.substring(1);

       if (((tempDate.getUTCFullYear()).toString()==tempy) &&
               (tempDate.getMonth()==parseInt(tempm)-1) &&
               (tempDate.getDate()==parseInt(tempd)) &&
               (tempDate.getHours() == parseInt(temph)) &&
               (tempDate.getMinutes() == parseInt(tempmi)) &&
               (tempDate.getSeconds() == parseInt(temps))
               ){
               return true;
               }
       else{
         if ((tempm == “1”) && (tempd == “1”)){
                       if (((tempDate.getUTCFullYear()).toString()==parseInt(tempy)-1) &&
                               (tempDate.getMonth()==parseInt(tempm)-1) &&
                               (tempDate.getDate()==parseInt(tempd)) &&
                               (tempDate.getHours() == parseInt(temph)) &&
                               (tempDate.getMinutes() == parseInt(tempmi)) &&
                               (tempDate.getSeconds() == parseInt(temps))
                               ){
                               return true;
                       }
        }
          return false;
     }
}

function isEnglish(name) //英文值检测
{
/***********************************
如果name里的字符全部是ASCII码,返回true,否则返回false
************************************/

  if(name.length == 0)
   return false;
  for(i = 0; i < name.length; i++) {
   if(name.charCodeAt(i) > 128)
    return false;
  }
  return true;
}

    //检查是否IP地址
    function checkIfIP(ipstr){    
     if (ipstr.length == 0) {
          return false;
     }
   
     while(ipstr.length>0 && ipstr.charAt(0)==” “){
        ipstr = ipstr.substring(1);
     }
     while(ipstr.length>0 && ipstr.charAt(ipstr.length-1)==” “){
        ipstr = ipstr.substring(0,ipstr.length-1);
     }
         
     var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
     var IPArray = ipstr.match(ipDomainPat);
     if (IPArray != null) {
                      for (var i = 1; i <= 4; i++) {
                         if (IPArray > 255) {
                            return false;
                         }//if
                      }//for
                      return true;
      }//if
 }
 
 

//判断是否为EMAIL地址
function checkEmail(emailStr) {
              if (emailStr.length == 0) {
                  return true;
              }
              var emailPat=/^(.+)@(.+)$/;
              var specialChars=”\\(\\)<>@,;:\\\\\\\”\\.\\[\\]”;
              var validChars=”\[^\\s” + specialChars + “\]”;
              var quotedUser=”(\”[^\”]*\”)”;
              var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
              var atom=validChars + '+';
              var word=”(” + atom + “|” + quotedUser + “)”;
              var userPat=new RegExp(“^” + word + “(\\.” + word + “)*$”);
              var domainPat=new RegExp(“^” + atom + “(\\.” + atom + “)*$”);
              var matchArray=emailStr.match(emailPat);
              if (matchArray == null) {
                  return false;
              }
              var user=matchArray[1];
              var domain=matchArray[2];
              if (user.match(userPat) == null) {
                  return false;
              }
              var IPArray = domain.match(ipDomainPat);
              if (IPArray != null) {
                  for (var i = 1; i <= 4; i++) {
                     if (IPArray > 255) {
                        return false;
                     }
                  }
                  return true;
              }
              var domainArray=domain.match(domainPat);
              if (domainArray == null) {
                  return false;
              }
              var atomPat=new RegExp(atom,”g”);
              var domArr=domain.match(atomPat);
              var len=domArr.length;
              if ((domArr[domArr.length-1].length < 2) ||
                  (domArr[domArr.length-1].length > 3)) {
                  return false;
              }
              if (len < 2) {
                  return false;
              }
              return true;
           }

//EMAIL的判断
function isemail(str){
 var flag=true;
 if((str.length ==0) ||(str==null)){
     flag=true;
 }else{
   var atindex =str.indexOf('@');
   var dotindex=str.indexOf('.',atindex);  
   thesub =str.substring(0,dotindex+1);
   if((atindex<1)||(atindex!=str.lastIndexOf('@'))||(dotindex       flag=false;
  }else{
    flag=true;
  }
 }
 return(flag);
}

 
[/java]

[file]attachment/200704/validate.txt[/file]

Share

2 Comments

  1. pcdos说道:

    var num = parseInt(v);  
       if(isNaN(num)){  
         return false;  
       }else{  
           return true;  
       }  
    这种写成 return !isNaN(parseInt(v)),简单也易懂
    另外很多验证如果通过正则表达式来处理的,代码就会简洁的多

Leave a Reply

Your email address is never published nor shared. Required fields are marked with a *.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。