php实现的表单验证类完整示例
本文实例讲述了php实现的表单验证类。分享给大家供大家参考,具体如下:
'8gAg:']; *$validator=newValidator($rules); *$validator->addRule(['name|名字','regex','/^[0-8|a-z]+$/','正则验证失败哦']);//可以为二维数组,有|的正则验证只能通过addRule。 *$validator->validate($data); *$validator->getAllErrors();//获取所有验证错误array *$validator->getError();//获取第一条验证错误string *Validator::in('7,8,9',8);//静态调用 *Validator::isEmail('375373223@qq.com'); */ namespaceValidate; classValidator{ //错误信息 private$error=[]; //传入的验证规则 private$validate=[]; //需要验证的参数 private$data=[]; //添加的规则 private$add_rules=[]; //默认错误提示 private$error_msg=[ 'require'=>':attribute不能为空', 'number'=>':attribute必须为数字', 'array'=>':attribute必须为数组', 'float'=>':attribute必须为浮点数', 'boolean'=>':attribute必须为布尔值', 'email'=>':attribute必须为正确的邮件地址', 'url'=>':attribute必须为正确的url格式', 'ip'=>':attribute必须为正确的ip地址', 'timestamp'=>':attribute必须为正确的时间戳格式', 'date'=>':attribute必须为正确的日期格式', 'regex'=>':attribute格式不正确', 'in'=>':attribute必须在:range内', 'notIn'=>':attribute必须不在:range内', 'between'=>':attribute必须在:1-:2范围内', 'notBetween'=>':attribute必须不在:1-:2范围内', 'max'=>':attribute最大值为:1', 'min'=>':attribute最小值为:1', 'length'=>':attribute长度必须为:1', 'confirm'=>':attribute和:1不一致', 'gt'=>':attribute必须大于:1', 'lt'=>':attribute必须小于:1', 'egt'=>':attribute必须大于等于:1', 'elt'=>':attribute必须小于等于:1', 'eq'=>':attribute必须等于:1', ]; publicfunction__construct($validate=null){ $this->validate=$validate; } /** *[validate验证] *@param[type]$data[需要验证的参数] *@return[type][boolean] */ publicfunctionvalidate($data){ $this->data=$data; foreach($this->validateas$key=>$item){ $item_len=count($item); $name=$item[0]; $rules=$item[1]; $rules=explode('|',$rules); $message=$item_len>2?explode('|',$item[2]):null; $this->check($name,$rules,$message); } if(!empty($this->add_rules)){ $this->checkAddRules(); } returnempty($this->error)?TRUE:FALSE; } /** *[check单个字段验证] *@param[type]$name[description] *@param[type]$rules[description] *@param[type]$message[description] *@return[type][null] */ privatefunctioncheck($name,$rules,$message){ //$title=$name; $rule_name=$title=$name; if(strpos($name,'|')){ $rule_name=explode('|',$name)[0]; $title=explode('|',$name)[1]; } foreach($rulesas$i=>$rule){ $validate_data=isset($this->data[$rule_name])?$this->data[$rule_name]:null; $result=$this->checkResult($rule,$validate_data); if(!$result){ $error_info=isset($message[$i])?$message[$i]:$this->getMessage($title,$rule); if($error_info){ array_push($this->error,$error_info); } } } } /** *[getMessage获取验证失败的信息] *@param[type]$name[字段名] *@param[type]$rule[验证规则] *@return[type][stringORfailfalse] */ privatefunctiongetMessage($name,$rule){ $value1=''; $value2=''; $range=''; $error_key=$rule; if(strpos($rule,':')){ $exp_arr=explode(':',$rule); $error_key=$exp_arr[0]; $range=$exp_arr[1]; $message_value=explode(',',$exp_arr[1]); $value1=isset($message_value[0])?$message_value[0]:''; $value2=isset($message_value[1])?$message_value[1]:''; } if(isset($this->error_msg[$error_key])){ returnstr_replace([':attribute',':range',':1',':2'],[$name,$range,$value1,$value2],$this->error_msg[$error_key]); } returnfalse; } /** *[checkResult字段验证] *@param[type]$rule[验证规则] *@param[type]$validate_data[需要验证的数据] *@return[type][boolean] */ privatefunctioncheckResult($rule,$validate_data){ switch($rule){ case'require': return$validate_data!=''; break; case'number': returnfilter_var($validate_data,FILTER_SANITIZE_NUMBER_INT); break; case'array': returnis_array($validate_data); break; case'float': returnfilter_var($validate_data,FILTER_VALIDATE_FLOAT); break; case'boolean': returnfilter_var($validate_data,FILTER_VALIDATE_BOOLEAN); break; case'email': returnfilter_var($validate_data,FILTER_VALIDATE_EMAIL); break; case'url': returnfilter_var($validate_data,FILTER_SANITIZE_URL); case'ip': returnfilter_var($validate_data,FILTER_VALIDATE_IP); break; case'timestamp': returnstrtotime(date('Y-m-dH:i:s',$validate_data))==$validate_data; break; case'date'://2017-11-1712:12:12 returnstrtotime($validate_data); break; default: if(strpos($rule,':')){ $rule_arr=explode(':',$rule); $func_name=substr($rule,strpos($rule,':')+1); returncall_user_func_array([$this,$rule_arr[0]],[$func_name,$validate_data]); }else{ returncall_user_func_array([$this,$rule],[$rule,$validate_data]); } break; } } /** *[regex正则验证] *@param[type]$rule[description] *@param[type]$data[description] *@return[type][description] */ publicstaticfunctionregex($rule,$data){ returnfilter_var($data,FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>$rule]]); } /** *[addRule添加规则格式[]] *@param[type]$rule[description] */ publicfunctionaddRule($rule){ if(is_array(current($rule))){ $this->add_rules=array_merge($this->add_rules,$rule); }else{ array_push($this->add_rules,$rule); } } /** *[checkAddRules添加新的规则的验证] *@return[type][description] */ publicfunctioncheckAddRules(){ foreach($this->add_rulesas$key=>$item){ $name=$item[0]; $message=isset($item[3])?$item[3]:null; $rule_name=$title=$name; if(strpos($name,'|')){ $rule_name=explode('|',$name)[0]; $title=explode('|',$name)[1]; } $validate_data=isset($this->data[$rule_name])?$this->data[$rule_name]:null; $result=$this->checkResult($item[1].':'.$item[2],$validate_data); if(!$result){ $error_info=isset($message)?$message:$this->getMessage($title,$item[1]); if($error_info){ array_push($this->error,$error_info); } } } } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionin($rule,$data){ if(!is_array($rule)){ $rule=explode(',',$rule); } returnin_array($data,$rule); } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionnotIn($rule,$data){ return!$this->in($data,$rule); } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionbetween($rule,$data){ $rule=explode(',',$rule); return$data>=$rule[0]&&$data<=$rule[1]; } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionnotBetween($rule,$data){ return!$this->between($rule,$data); } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionmax($rule,$data){ return$data<=$rule; } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionmin($rule,$data){ return$data>=$rule; } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionlength($rule,$data){ $length=is_array($data)?count($data):strlen($data); return$length==$rule; } /** *[indescription] *@param[type]$rule[验证规则] *@param[type]$data[需要验证的数据] *@return[type][boolean] */ publicstaticfunctionconfirm($rule,$data){ returnisset($this->data[$rule])&&$data==$this->data[$rule]; } publicstaticfunctiongt($rule,$data){ return$data>$rule; } publicstaticfunctionlt($rule,$data){ return$data<$rule; } publicstaticfunctionegt($rule,$data){ return$data>=$rule; } publicstaticfunctionelt($rule,$data){ return$data<=$rule; } publicstaticfunctioneq($rule,$data){ return$data==$rule; } /** *[in获取验证失败的第一条信息] *@return[type][string] */ publicfunctiongetError(){ returncount($this->error)>0?$this->error[0]:null; } /** *[getAllErrors获取所有验证失败的信息] *@return[type][array] */ publicfunctiongetAllErrors(){ return$this->error; } /** *[__call调用自定义函数或者] *@param[type]$func[验证规则,函数名] *@param[type]$data[验证数据] *@return[type][boollean] */ function__call($func,$data){ $func_arr=get_defined_functions(); if(in_array($func,$func_arr['user'])){ returncall_user_func($func,$data); }else{ array_push($this->error,'没有'.$func.'这个方法'); } } /** *[__callStatic静态方法调用自定义函数或者] *@param[type]$func[验证规则,函数名] *@param[type]$data[验证数据] *@return[type][boollean] */ publicstaticfunction__callStatic($func,$data){ if(substr($func,0,2)=='is'){ returncall_user_func_array([newself,'checkResult'],[strtolower(substr($func,2)),$data[0]]); } } }
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php程序设计安全教程》、《php安全过滤技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。