快活鱼Rukee

食品专业毕业结果找不到饭吃,为了混饱肚子我就变成挨踢人了, : P

导航

封装好的Javascript客户端校验类,支持各种数据类型和校验方法

ValidateUti.js
/**
 * 
 * <p>Title: ValidateUti.js</p>
 * <p>Description: the js be include to validate form data.</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Freeborders</p>
 * @author Rukee Fan
 * @version 1.1 2004-08-05
 * @see sample page: validateSample.htm
 
*/


function FBvalidater()
{
    
this.clearinvalidControlList();
    
this.clearvalidater();
}


FBvalidater.prototype 
= 
{
    validateobj_obj        :    [],
    errorMessage        :    
'',
    invalidControlList    :    [],
    firstinvalidControl    :    
null,
    AutoFocus        :    
true,
    AutoSelect        :    
true,
    DATE_FORMAT        :    
"yyyy-mm-dd",
    
    addvalidater        :    function(validater)
    
{
        var a_lenght 
= this.validateobj_obj.length;
        
this.validateobj_obj[a_lenght] = validater;
    }
,
    
    addrequirevalidater     :    function(ValidateControl,ErrorMessage)
    
{
        var obj_validate 
= new requirevalidater(ValidateControl,ErrorMessage) ;
        
this.addvalidater(obj_validate);
    }
,
    
    addcomparevalidater    :    function(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) 
{
        var obj_validate 
= new comparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage);
        
this.addvalidater(obj_validate);
    }
,
        
    clearvalidater        :    function()
    
{
        var Temp_obj 
= new Array();
        
this.validateobj_obj = Temp_obj;
    }
,
    
    validate        :    function()
    
{
      
this.clearinvalidControlList();
      
this.errorMessage = "";
      var errormessage 
= "";
      var i
=0;
      
for (i=0;i<=(this.validateobj_obj.length-1);i++{
          var obj 
= this.validateobj_obj[i].ValidateControl;
          
if (obj.length) {
              var subobj;
              
for (subobj in obj) {
                  
//----- 2004-08-05 add by rukee.fan -----
                  
// when validate a obj array with same error message, only display this message one time.
                  var validatereturn = this.validateobj(obj[subobj],this.validateobj_obj[i]);
                  
if (validatereturn!=false{
                      
this.addToinvalidControlList(obj[subobj]);
                      errormessage 
= errormessage + validatereturn;    
                      
break
                  }

                  
//----- 2004-08-05 add by rukee.fan -----
              }

          }
else{
              var validatereturn 
= this.validateobj(obj,this.validateobj_obj[i])
              
if (validatereturn!=false{
                  
this.addToinvalidControlList(obj);
                  errormessage 
= errormessage + validatereturn;
            }

              
          }

      }

      
      
if (errormessage!=""{
          
if (this.AutoFocus) {
              
try {
                  
this.firstinvalidControl.focus();    
              }
catch(e){}
          }

          
if (this.AutoSelect) {
              
try {
                  
this.firstinvalidControl.select();
              }
catch(e){}
          }

          
this.errorMessage = errormessage;
          
return false;
      }
else{
          
return true;
      }

    }
,
        
    validateobj        :    function(obj,validater) 
    
{
        
if (validater.ValidateType.toLowerCase()=="require"&&obj.value.trim()==""{
          
return  validater.ErrorMessage;
        }

        
        
if (validater.ValidateType.toLowerCase()=="compare"{
            var CompairValue 
= validater.CompairValue;
              var IsComparePass;
              
            
if (validater.DataType.toLowerCase()=="length"{
              CompairValue 
= parseInt(CompairValue);
              
if (isNaN(CompairValue)) 
              

                  alert(
"CompairValue parameter error,it must be a integer.");
                  
return false;
              }

              
              IsComparePass 
= eval(obj.value.toString().length.toString() + validater.CompairMethod + CompairValue.toString())
              
if (IsComparePass) {
                  
return false;
              }

              
              
return  validater.ErrorMessage;              
            }

            
              
if (obj.value.trim()==""return false;
              
                var get_inputvalue; 
//get the value passed the validate.
              if (validater.DataType.toLowerCase()=='number'{
                  var ls_TempValue
=obj.value.ChangeToNum();
                
if (isNaN(ls_TempValue)) 
                

                    
return  validater.ErrorMessage;
                  }
else{
                      get_inputvalue 
= obj.value.trim();
                  }

              }

              
              
if (validater.DataType.toLowerCase()=='int'{
                  get_inputvalue 
= obj.value.trim();
                  
if (get_inputvalue.toString()!= parseInt(get_inputvalue).toString()) {
                      
return  validater.ErrorMessage;
                  }
else{
                      
                  }

              }

              
              
              
if (validater.DataType.toLowerCase()=='date'{
                  get_inputvalue 
= obj.value.parseDate(this.DATE_FORMAT);
                  
                  
if (get_inputvalue) {
                      
                  }
else{
                      
return  validater.ErrorMessage;
                  }

              }

              
              
if (validater.CompairMethod.toLowerCase() != "typecheck"{
                  
if (validater.DataType=='date'{
                      get_inputvalue 
= get_inputvalue.getTime().toString();
                      CompairValue 
= validater.CompairValue.parseDate(this.DATE_FORMAT);
                      
if (CompairValue) {
                          CompairValue 
= CompairValue.getTime().toString();    
                      }

                  }

                  
                  IsComparePass 
= eval(get_inputvalue + validater.CompairMethod +  CompairValue)
                  
if (!IsComparePass) {
                      
return  validater.ErrorMessage;            
                  }

              }

         }

                
        
return false;
    }
,
    addToinvalidControlList    : function(obj)
    
{
        var a_lenght 
= this.invalidControlList.length;
        
this.invalidControlList[a_lenght] = obj;
        
this.firstinvalidControl = this.invalidControlList[0];
    }
,
    clearinvalidControlList    : function()
    
{
        var Temp_obj 
= new Array();
        
this.invalidControlList = Temp_obj;
        firstinvalidControl 
= null;
    }

    

}



function requirevalidater() 
{
    
this.ValidateControl = ""
    
this.ValidateType = "require";  
    
this.ErrorMessage = "";  
}


function requirevalidater(ValidateControl,ErrorMessage) 
{
    
this.ValidateControl = ValidateControl; 
    
this.ValidateType = "require";  
    
this.ErrorMessage = ErrorMessage; 
}


function comparevalidater() 
{
    
this.ValidateControl = "";
    
this.ValidateType = "compare";
    
this.CompairMethod = "TypeCheck"// >; >= ; = ; <= ; <;
    this.DataType = ""//number; int; Date; Length;
    this.CompairValue = "";
    
this.ErrorMessage = "";
}


function comparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) 
{
    
this.ValidateControl = ValidateControl; 
    
this.ValidateType = "compare";
    
if (CompairMethod=="") CompairMethod = "TypeCheck";
    
this.CompairMethod = CompairMethod; // TypeCheck ;  > ; >= ; = ; <= ; <;
    this.DataType = DataType; //number; int; Date; Length;
    this.CompairValue = CompairValue;
    
this.ErrorMessage = ErrorMessage;
}


/**
* parseDate(format)
* parse a string to date
*/

String.prototype.parseDate 
= function(format){
    var dateVal 
= this;
    
if(dateVal==undefined) return false;
    
if(dateVal==nullreturn false;
    dateVal
=dateVal.trim();
    
if(format.length!=dateVal.length) return false;
    
    var dateArr
=["","","","","",""];
    
for(z=0;z<format.length;z++)
    
{    
        
switch(format.charAt(z))
        
{    
            
case "d":dateArr[0]+=dateVal.charAt(z);break;
            
case "m":dateArr[1]+=dateVal.charAt(z);break;
            
case "y":dateArr[2]+=dateVal.charAt(z);break;
            
case "h":dateArr[3]+=dateVal.charAt(z);break;
            
case "i":dateArr[4]+=dateVal.charAt(z);break;
            
case "s":dateArr[5]+=dateVal.charAt(z);break;
        }

    }
;
    
    
for(z=0;z<dateArr.length;z++)
    
{    
        
if(isNaN(dateArr[z]))return false;
        dateArr[z]
=new Number(dateArr[z]);
    }
;
    
if(dateArr[0]<1||dateArr[0]>31return false;
    
if(dateArr[2]<100)
    
{
        dateArr[
2]+=1900;
        
if(dateArr[2]<1950)dateArr[2]+=100;
    }

    
    
if(dateArr[3]>24)return false;
    
if(dateArr[5]>60)return false;
    
if(dateArr[0]==31&&(dateArr[1]==2||dateArr[1]==4||dateArr[1]==6||dateArr[1]==9||dateArr[1]==11)) return false;
    
if(dateArr[0]==29&&dateArr[1]==2&&dateArr[2]%4!=0)return false;

    
return new Date(dateArr[2],dateArr[1]-1,dateArr[0],dateArr[3],dateArr[4],dateArr[5]);
}


/**
* trim()
* Use null string to replace space before and after of the string;
*/

String.prototype.trim 
= function()
{
    
return this.replace(/(^s*)|(s*$)/g, "");
}


/**
* ChangeToNum()
* change string to number;
*/

String.prototype.ChangeToNum 
= function()
{
    var r, re;
    re 
= / /g;
    r
=this.replace(re, "");
    
if (r==""{
        r
="ls_null";
    }

    
    var reg 
= /^[-|+]?[d]+(.)?[d]*$/;
    var r2 
=r.match(reg);
    
if(r2==null) r = parseFloat("abc"); // return a NaN;

    
return(r);
}
validateSample.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html style="width:600px;height:600px">
<title>Fabric Details</title>
<style type="text/css">
<!--
td
{
  word-break
:normal;
}

//-->
</style>
<META name="GENERATOR" content="IBM WebSphere Studio">
<script language="javascript" src="ValidateUti.js"></script>
<script language="javascript">
<!--
function checkFormData(){
  
//new a validater
  var myFBvalidater = new FBvalidater();

  validate1 
= new requirevalidater()
  validate1.ValidateControl 
= SB_Asset_Details_form.LocalAssetImage;
  validate1.ErrorMessage 
= "Please select a local image ! ";
  myFBvalidater.addvalidater(validate1);
  
  
var objarray=new Array();
  objarray[
1]=SB_Asset_Details_form.LocalAssetID;
  objarray[
0]=SB_Asset_Details_form.Description;
  
  
// addrequirevalidater(ValidateControl,ErrorMessage) 向校验对象中新增需要校验不为空的控件对象。
 //参数一ValidateControl: 待校验的控件对象,可以是一个控件,也可以是一个控件数组
 //参数二 ErrorMessage: 如果校验不通过返回的错误信息。
  myFBvalidater.addrequirevalidater(objarray, "Field can not been null! "
  
  
//addcomparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) 向校验对象中新增需要进行比较校验(数据类型,数据范围)的控件对象。 
 //第一个参数ValidateControl:是指定待校验的控件对象,可以是一个控件,也可以是一个控件数组。
 //第二个参数CompairMethod:指定校验方法,包括 (TypeCheck, >, >=, =, <, <=)
 //第三个参数DataType:指定数据类型,包括 (number, int, Date, Length )
 //第四个参数CompairValue:指定校验的比较值,如果是字符校验,则指定长度,如果是对页面中的两个控件的值进行比较,此参数可以是要进行比较的控件的值(如:validateForm.modiDate.value)。
 //第五个参数ErrorMessage:如果校验不通过返回的错误信息
 //所有参数必须输入,当第二个参数是'TypeCheck', 则第三个参数不能是'Length'
  
  
// validate a integer type input field; 
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_typenumber,'TypeCheck','number','','Please input a integer! ');
  
  
// validate a number input field, must bigger than 7.
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_compairnumber,'>','number','7','Please input a integer big than 7! ');
  
  
// validate a number input field, must bigger than another number input field.
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_compairnumber,'>','number',SB_Asset_Details_form.txt_typenumber.value,'compairnumber must bigger than typenumber! ');
  
  
// validate a datetime input field.
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_inputDate,'TypeCheck','date','','Please input a DateTime! ');
  
  
// validate a datetime input field, must bigger than 2003-04-01.
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_inputDate,'>','date','2003-04-01','Please input a DateTime biger than 2003-04-01! ');
  
  
// validate a input field, length must less or equal than 10.
  myFBvalidater.addcomparevalidater(SB_Asset_Details_form.Description,'<=','Length','10','field length must <= 10! ');
  
  
// validate() 
  // returnvalue: true or false
  if (myFBvalidater.validate())
  
{
      alert(
"validate passed!");
  }
  else{
      alert(myFBvalidater.errorMessage);
  }

}


//-->
</script>
<body id="bodyTable" BGCOLOR="#FFFFFF">
<form name="SB_Asset_Details_form" method="POST" enctype="multipart/form-data">
<input type="text" name="LocalAssetID" size="26" value=""><br>
<textarea name="Description" cols="41" rows="5" onkeypress="javascript:if(this.value.length>248){return false;}">few</textarea><br>
<input type="file" name="LocalAssetImage" size="26" value="" onkeydown="javascript:return false;"><br>
Number(int):
<input type="input" name="txt_typenumber" size="26" value="" ><br>
Compair Number( >7 ):
<input type="input" name="txt_compairnumber" size="26" value="" ><br>
Date:
<input type="input" name="txt_inputDate" size="26" value="" ><br>
<input type="button" name="Save" value="Save" onclick="javascript:checkFormData();" class="blueButton">

</form>
</body>
</html>

posted on 2004-08-09 14:19  快活鱼  阅读(1782)  评论(4编辑  收藏  举报