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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。