表單驗證類(未精簡)
<?php /**************** *????verify.class.php *????表單驗證類 *****************/ class?Verify{ ????private?$params; ????public?function?__construct($input=array()){ ????????$this->init($input); ????} ???? ????/* ????*????@function?初始化參數(shù) ????*????@param?array?$input表單域名數(shù)組?示例array("userName","pwd") ????*????@return? ????*/ ????public?function?init($input=array()){ ????????$this->params=$input; ????} ???? ????/** ????*????@function?檢測所有提交數(shù)據(jù)是否通過驗證 ????*????@param?array?$input?二維數(shù)組?示例:?array(array("name"=>?,"value"=>,"type"=>,"format"=>,"allow_arr"=>,"maxLength"=>,"mixLength"=>,"isEmpty"=>),) ????*????@return?boolean?true|false ????*/ ????public?function?checkAll($input){ ????????if(is_array($input)){ ????????????$flag=true; ????????????foreach($input?as?$key=>$value){ ????????????????if(!isset($this->params[$value["name"]])){ ????????????????????continue; ????????????????} ????????????????$value["allow_arr"]=(isset($value["allow_arr"])?&&?is_array($value["allow_arr"]))???$value["allow_arr"]?:?array(); ????????????????$value["maxLength"]=isset($value["maxLength"])???$value["maxLength"]?:?0;? ????????????????$value["mixLength"]=isset($value["mixLength"])???$value["mixLength"]?:?0; ????????????????$value["isEmpty"]=isset($value["isEmpty"])???$value["isEmpty"]?:?0; ????????????????$result=$this->inputCheck($value["name"],$value["value"],$value["type"],$value["format"],$value["allow_arr"],$value["maxLength"],$value["mixLength"],$value["isEmpty"]); ????????????????if($result===false){ ????????????????????$flag=false; ????????????????????echo?"表單域名稱為".$value["name"]."的值".$value["value"]."未通過驗證"; ????????????????????break; ????????????????} ????????????} ????????????return?$flag; ????????} ????} ????/* ????*????@function?輸入?yún)?shù)驗證是否通過 ????*????@params?string?$name?表單名 ????*????????????mixed?$value?表單名對應的值 ????*????????????string?$type?變量類型?必須是基礎數(shù)據(jù)類型int,bool,double,string。???? ????*????????????string?$format?數(shù)據(jù)格式類型?email,pwd等 ????*????????????array?$allow_arr?允許范圍 ????*????????????int?$maxLength?最大長度 ????*????????????int?$mixLength?最小長度 ????*????????????int?$isEmpty?是否允許為空 ????*????@return?boolean?true|false ????*/ ????public?function?inputCheck($name,$value,$type,$format,$allow_arr=array(),$maxLength=0,$mixLength=0,$isEmpty=0){ ????????//檢查變量是否存在 ????????if(!isset($this->params[$name])){ ????????????return?false; ????????} ????????//第二步?判斷變量是否有值 ????????if(empty($value)){ ????????????if($isEmpty==0){ ????????????????return?false; ????????????} ????????????else{ ????????????????return?true; ????????????} ????????} ????????//第三步?判斷變量類型是否 ????????if($this->getParameterType($value)!==$type){ ????????????return?false; ????????} ????????//第四步?如果是字符串判斷其是否在指定長度內 ????????if(is_string($value)?&&?(strlen(trim($value))<$mixLength?||?strlen(trim($value))>$maxLength)){ ????????????return?false; ????????} ????????//第四步?如果是選擇項即allow_arr數(shù)組不為空,是否在數(shù)組范圍內 ????????if(!empty($allow_arr)?&&?!in_array($value,$allow_arr)){ ????????????return?false; ????????} ????????//第五步?進入正則表達式驗證 ????????return?$this->matchValue($value,$format); ????} ????/* ????*????@function?獲得參數(shù)的數(shù)據(jù)類型 ????*????@params?mixed?$value參數(shù) ????*????@return?string?$var_type數(shù)據(jù)類型 ????*/ ????public?function?getParameterType($value){ ????????$var_type=""; ????????if(is_int($value)){ ????????????$var_type="int"; ????????} ????????else?if(is_bool($value)){ ????????????$var_type="bool"; ????????} ????????else?if(is_double($value)){ ????????????$var_type="double"; ????????} ????????else?if(is_string($value)){ ????????????$var_type="string"; ????????} ????????else{ ????????????$var_type="unkown"; ????????} ????????return?$var_type; ????} ????/* ????*????@function?使用正則表達式檢驗值 ????*????@params?mixed?$value參數(shù),string?$format數(shù)據(jù)格式類型 ????*????@return?boolean?true|false ????*/ ????public?function?matchValue($value,$format){ ????????switch($format){ ????????????case?"integer"://整數(shù) ????????????????return?is_int($value); ????????????????break; ????????????case?"account"://賬號 ????????????????//由字母a~z(不區(qū)分大小寫)、數(shù)字0~9、下劃線組成只能以字母開頭和(數(shù)字或字母)結尾?用戶名長度為8~18個字符 ????????????????return?preg_match("/^[a-za-z]{1}[a-za-z0-9|_]{6-16}[a-za-z0-9]{1}$/",$value); ????????????????break; ????????????case?"password"://密碼 ????????????????//由字母a~z(不區(qū)分大小寫)、數(shù)字0~9、下劃線組成只能以字母開頭和(數(shù)字或字母)結尾?用戶名長度為6~14個字符 ????????????????return?preg_match("/^[a-zA-Z]{1}[a-za-z0-9|_]{4-12}[a-za-z0-9]{1}$/",$value); ????????????default: ????????????????break; ????????} ????} } //測試代碼 $cols=array("account"); $verify=new?Verify($cols); $inputCheck=array(); $inputCheck[]=array("name"=>"account","value"=>$account,"type"=>"string","format"=>"account","maxLength"=>18,"mixLength"=>8); $rs=$verify->checkAll($inputCheck); ?>
本人菜鳥一個,寫了一個簡單的表單驗證類,各位大大及老師幫我看看,還有哪些不足或遺漏的地方,希望指出,謝謝!
2015-03-10
自己糾正一下一個邏輯錯誤,第四步?如果是字符串判斷其是否在指定長度內時
修改前
修改后