php提交表单验证表
php实现的表单验证类完整示例本文实例讲述了php实现的表单验证类。分享给大家供大家参考,具体如下:
|
<?php /** * 用法 * use Validate\Validator; * * $rules = [ * ['name|名字', 'require|email|in:7,8,9|max:10|min:6|between:6,8|length:2', '名字不能为空|名字必须必须为正确的邮件地址'], * ['test|测试', 'require'], * ]; * $data = ['name' => '8gAg:']; * $validator = new Validator($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'); */ namespace Validate; class Validator { //错误信息 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' , ]; public function __construct( $validate = null) { $this ->validate = $validate ; } /** * [validate 验证] * @param [type] $data [需要验证的参数] * @return [type] [boolean] */ public function validate( $data ) { $this ->data = $data ; foreach ( $this ->validate as $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(); } return empty ( $this ->error) ? TRUE : FALSE; } /** * [check 单个字段验证] * @param [type] $name [description] * @param [type] $rules [description] * @param [type] $message [description] * @return [type] [null] */ private function check( $name , $rules , $message ) { //$title = $name; $rule_name = $title = $name ; if ( strpos ( $name , '|' )) { $rule_name = explode ( '|' , $name )[0]; $title = explode ( '|' , $name )[1]; } foreach ( $rules as $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] [string OR fail false] */ private function getMessage( $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 ])) { return str_replace ([ ':attribute' , ':range' , ':1' , ':2' ], [ $name , $range , $value1 , $value2 ], $this ->error_msg[ $error_key ]); } return false; } /** * [checkResult 字段验证] * @param [type] $rule [验证规则] * @param [type] $validate_data [需要验证的数据] * @return [type] [boolean] */ private function checkResult( $rule , $validate_data ) { switch ( $rule ) { case 'require' : return $validate_data != '' ; break ; case 'number' : return filter_var( $validate_data , FILTER_SANITIZE_NUMBER_INT); break ; case 'array' : return is_array ( $validate_data ); break ; case 'float' : return filter_var( $validate_data , FILTER_VALIDATE_FLOAT); break ; case 'boolean' : return filter_var( $validate_data , FILTER_VALIDATE_BOOLEAN); break ; case 'email' : return filter_var( $validate_data , FILTER_VALIDATE_EMAIL); break ; case 'url' : return filter_var( $validate_data , FILTER_SANITIZE_URL); case 'ip' : return filter_var( $validate_data 标签:
|