php可扩展的验证类实例(可对邮件、手机号、URL等验证)
本文实例讲述了php可扩展的验证类。分享给大家供大家参考。具体分析如下:
这里介绍一个可扩展的php验证类,
类里面可以的各类验证可自行调整实现,现在为基本实现方式。
需要添加规则的话,直接定义方法,方法名即为规则名称。具体参考使用方法。
require_once('./Validator.class.php'); $data=array( 'nickname'=>'heno', 'realname'=>'steven', 'age'=>25, 'mobile'=>'1521060426'); $validator=newValidator($data); $validator->setRule('nickname','required'); $validator->setRule('realname',array('length'=>array(1,6),'required')); $validator->setRule('age',array('required','digit')); $validator->setRule('mobile',array('mobile')); $result=$validator->validate(); var_dump($result); var_dump($validator->getResultInfo());
Validator.class.php文件如下:
<?php /** *Validator数据验证类 *@packagelibrary *@categorylibrary *@authorSteven *@version1.0 */ /** *Validator数据验证类 *@packagelibrary *@categorylibrary *@authorSteven *@version1.0 */ classValidator{ /** *待校验数据 *@vararray */ private$_data; /** *校验规则 *@vararray */ private$_ruleList=null; /** *校验结果 *@varbool */ private$_result=null; /** *校验数据信息 *@vararray */ private$_resultInfo=array(); /** *构造函数 *@paramarray$data待校验数据 */ publicfunction__construct($data=null) { if($data){ $this->_data=$data; } } /** *设置校验规则 *@paramstring$var带校验项key *@parammixed$rule校验规则 *@returnvoid */ publicfunctionsetRule($var,$rule) { $this->_ruleList[$var]=$rule; } /** *检验数据 *@paramarray$data *<code> *$data=array('nickname'=>'heno','realname'=>'steven','age'=>25); *$validator=newValidator($data); *$validator->setRule('nickname','required'); *$validator->setRule('realname',array('lenght'=>array(1,4),'required')); *$validator->setRule('age',array('required','digit')); *$result=$validator->validate(); *var_dump($validator->getResultInfo()); *</code> *@returnbool */ publicfunctionvalidate($data=null) { $result=true; /*如果没有设置校验规则直接返回true*/ if($this->_ruleList===null||!count($this->_ruleList)){ return$result; } /*已经设置规则,则对规则逐条进行校验*/ foreach($this->_ruleListas$ruleKey=>$ruleItem){ /*如果检验规则为单条规则*/ if(!is_array($ruleItem)){ $ruleItem=trim($ruleItem); if(method_exists($this,$ruleItem)){ /*校验数据,保存校验结果*/ $tmpResult=$this->$ruleItem($ruleKey); if(!$tmpResult){ $this->_resultInfo[$ruleKey][$ruleItem]=$tmpResult; $result=false; } } continue; } /*校验规则为多条*/ foreach($ruleItemas$ruleItemKey=>$rule){ if(!is_array($rule)){ $rule=trim($rule); if(method_exists($this,$rule)){ /*校验数据,设置结果集*/ $tmpResult=$this->$rule($ruleKey); if(!$tmpResult){ $this->_resultInfo[$ruleKey][$rule]=$tmpResult; $result=false; } } }else{ if(method_exists($this,$ruleItemKey)){ /*校验数据,设置结果集*/ $tmpResult=$this->$ruleItemKey($ruleKey,$rule); if(!$tmpResult){ $this->_resultInfo[$ruleKey][$ruleItemKey]=$tmpResult; $result=false; } } } } } return$result; } /** *获取校验结果数据 *@return[type][description] */ publicfunctiongetResultInfo() { return$this->_resultInfo; } /** *校验必填参数 *@paramstring$varName校验项 *@returnbool */ publicfunctionrequired($varName) { $result=false; if(is_array($this->_data)&&isset($this->_data[$varName])){ $result=true; } return$result; } /** *校验参数长度 * *@paramstring$varName校验项 *@paramarray$lengthDataarray($minLen,$maxLen) *@returnbool */ publicfunctionlength($varName,$lengthData) { $result=true; /*如果该项没有设置,默认为校验通过*/ if($this->required($varName)){ $varLen=mb_strlen($this->_data[$varName]); $minLen=$lengthData[0]; $maxLen=$lengthData[1]; if($varLen<$minLen||$varLen>$maxLen){ $result=true; } } return$result; } /** *校验邮件 *@paramstring$varName校验项 *@returnbool */ publicfunctionemail($varName) { $result=true; /*如果该项没有设置,默认为校验通过*/ if($this->required($varName)){ $email=trim($this->_data[$varName]); if(preg_match('/^[-\w]+?@[-\w.]+?$/',$email)){ $result=false; } } return$result; } /** *校验手机 *@paramstring$varName校验项 *@returnbool */ publicfunctionmobile($varName) { $result=true; /*如果该项没有设置,默认为校验通过*/ if($this->required($varName)){ $mobile=trim($this->_data[$varName]); if(!preg_match('/^1[3458]\d{10}$/',$mobile)){ $result=false; } } return$result; } /** *校验参数为数字 *@paramstring$varName校验项 *@returnbool */ publicfunctiondigit($varName) { $result=false; if($this->required($varName)&&is_numeric($this->_data[$varName])){ $result=true; } return$result; } /** *校验参数为身份证 *@paramstring$varName校验项 *@returnbool */ publicfunctionID($ID) { } /** *校验参数为URL *@paramstring$varName校验项 *@returnbool */ publicfunctionurl($url) { $result=true; /*如果该项没有设置,默认为校验通过*/ if($this->required($varName)){ $url=trim($this->_data[$varName]); if(!preg_match('/^(http[s]?::)?\w+?(\.\w+?)$/',$url)){ $result=false; } } return$result; } } ?>
希望本文所述对大家的php程序设计有所帮助。