欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

PHP表单提交参数验证类(可修改)

发布时间:2024/9/19 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PHP表单提交参数验证类(可修改) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** 表单验证类(参考 原ci CI_Form_validation 而修改)* 自行扩展里头验证器*/ class CI_Form_validation {protected $CI;protected $_model;//属性值及规则数组protected $_field_data = array();//错误所提示的信息protected $_error_messages = array();//收集到的错误protected $_error_array = array();//是否验证所有内容protected $_is_vail_all = FALSE;//验证字段public $rule_field = array();// private $_validation_data = array();public function __get($key){return $this->_field_data[$key]['content'];}public function __set($key,$value){$this->_field_data[$key]['content'] = $value;}public function get_data(){$content = array();foreach ($this->_field_data as $key => $value) {$content[$key] = $value['content'];}return $content;}/*** 获取有验证规则的数据* @return [type] [description]*/public function get_safe_data(){$content = array();foreach ($this->_field_data as $key => $value) {if(in_array($key, $this->rule_field))$content[$key] = $value['content'];}return $content;}/*** 属性赋值* @param [type] $data [description]*/public function set_data($data){$this->_set_data($data);}/*** 属性赋值* @param $data*/protected function _set_data($data){foreach ($data as $key => $value) {if(is_array($value)){foreach($value as $vkey => $vvalue){$value[$key.'.'.$vkey] = $vvalue;}$this->_set_data($value);}$this->_field_data[$key]['content'] = $value;}}/*** Constructor*/public function __construct($rules = array()){$this->CI =& get_instance();$this->_model = $this->CI;}/*** 设置规则* @param [type] $field 属性* @param string $label 属性名称* @param array $rules 规则* @param [type] $error_message [description]*/public function set_rule($field, $label = '', $rules = array(), $error_message=null){$add_rule = false;if(strstr($field,'.')){$search_field = substr($field,0,strrpos($field,'.'));$fields = array_keys($this->_field_data);foreach($fields as $fk => $fv){if($fv == $search_field){$add_rule = true;}}}else{$add_rule = true;}if($add_rule){if(is_string($rules))$rules = explode('|', $rules);$this->_field_data[$field]['field'] = $field;$this->_field_data[$field]['label'] = $label;$this->_field_data[$field]['rules'] = $rules;if($error_message){foreach ($rules as $rule) {$this->_error_messages[$field][$rule] = $error_message;}}array_push($this->rule_field, $field);return $this;}}/*** 批量设置规则* @param Array $data [description]*/public function set_rules(Array $data){foreach ($data as $key => $value) {$this->set_rule($value[0],$value[1],$value[2]);}}/*** 验证所有属性,并收集错误* @return [type] [description]*/public function run(){$this->_validate_data($this->_field_data);//判断是否验证通过if(count($this->_error_array)>0){return false;}return true;}/**** 验证所有属性,并收集错误* @param array $form_data*/protected function _validate_data($form_data = []){foreach($form_data as $key => $field) {if(!empty($field['rules'])){//非必需属性,且为空,不做验证,返回trueif(!in_array('required', $field['rules']) && empty($field['content'])){$result = true;}//必需属性,且为空,不做验证,返回falseelseif(in_array('required', $field['rules']) && empty($field['content'])){array_push($this->_error_array, $field['label'].'不得为空');$result = false;}// 属性不为空,则验证else{$result = $this->_execute($key,$field['label'],$field['rules'],$field['content']);}// 验证到错误,则不继续往下验证if($this->_is_vail_all==false && $result == false){break;}}}}/*** Executes the Validation routines** @param array* @param array* @param mixed* @param int* @return mixed*/protected function _execute($field, $label, $rules, $content){//循环验证规则foreach ($rules as $rule){if($rule == 'required'){$result = true;continue;}$param = FALSE;if ( preg_match('/(.*?)\[(.*)\]/', $rule, $match)){$rule = $match[1];$param = $match[2];}if( method_exists($this->_model, $rule)){$result = $this->_model->$rule( $field, $content, $param, $this);}elseif( method_exists($this, $rule)){$result = $this->$rule($field, $content, $param);}else{log_message('debug', 'Unable to find callback validation rule: '.$rule);$result = FALSE;}// 验证到错误,则不继续往下验证if($this->_is_vail_all==false && $result == false){break;}}return $result;}public function get_label_by_field($field){return $this->_field_data[$field]['label'];}/*** 获取最新的一条错误信息* @return [type] [description]*/public function get_newone_error(){if(empty($this->_error_array)){return null;}else{return end($this->_error_array);}}/*** 添加错误信息* @param [type] $msg [description]*/public function add_error($msg){array_push($this->_error_array, $msg);}/*** reset form* @return [type] [description]*/public function reset(){$this->_field_data = array();//错误所提示的信息$this->_error_messages = array();//收集到的错误$this->_error_array = array();//是否验证所有内容$this->_is_vail_all = FALSE;//验证字段$this->rule_field = array();}/*** 以下方法为验证器**//*** 安全字段不做验证* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function safe($field, $content, $param){return true;}/*** 验证最大长度** @param [type] $field* [description]* @param [type] $content* [description]* @param [type] $param* [description]* @return [type] [description]*/public function max_length($field, $content, $param){if (mb_strlen($content) > $param) {$msg = $this->get_label_by_field($field) . '不得超过' . $param . '字符';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}/*** 验证最小长度** @param [type] $field* [description]* @param [type] $content* [description]* @param [type] $param* [description]* @return [type] [description]*/public function min_length($field, $content, $param){if (mb_strlen($content) < $param) {$msg = $this->get_label_by_field($field) . '不得少于' . $param . '字符';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}/*** 验证是否为数字** @param [type] $field* [description]* @param [type] $content* [description]* @param [type] $param* [description]* @return [type] [description]*/public function numeric($field, $content, $param){if (! is_numeric($content)) {$msg = $this->get_label_by_field($field) . '必需为数字';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}/*** 验证参数是否在字符串中* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function in_key_string($field, $content, $param){$arr = explode(',', $param);if(!in_array($content, $arr)){$msg = $this->get_label_by_field($field).'不合法';$this->add_error($msg);return false;}return true;}/*** 验证是否为日期格式 (类似:2011-10-02)* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function date_format($field, $content, $param){$pattern = '/^([1-2]\d{3})\-(0?[1-9]|10|11|12)\-([1-2]?[0-9]|0[1-9]|30|31)$/i';if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的日期格式';$this->add_error($msg);return false;}return true;}/*** 验证时间格式(类似 08:00:00,24小时制度,从00:00:00到23:59:59)*/public function time_format($field, $content, $param){$pattern = '/^([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)$/i';if (! preg_match($pattern, $content)) {$msg = $this->get_label_by_field($field) . '必需为正确的时间格式';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}/*** 验证邮箱* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function email($field, $content, $param){$pattern = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的格式';$this->add_error($msg);return false;}return true;}/*** 身份证验证* (1、15位或18位,如果是15位,必需全是数字。2、如果是18位,最后一位可以是数字或字母Xx,其余必需是数字。)* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function card_id($field, $content, $param){$pattern = "/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/";if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的格式';$this->add_error($msg);return false;}return true;}/*** 验证手机号码* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function phone($field, $content, $param){$pattern = "/^1[3|4|5|7|8][0-9]{9}$/";if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的格式';$this->add_error($msg);return false;}return true;}/*** 验证qq号码* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function qq($field, $content, $param){$pattern = "/^[1-9]\d{4,}$/";if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的格式';$this->add_error($msg);return false;}return true;}/*** 固定电话* @param [type] $field [description]* @param [type] $content [description]* @param [type] $param [description]* @return [type] [description]*/public function tel($field, $content, $param){$pattern = "/^\d{2,5}-\d{7,8}(-\d{1,})?$/";if(!preg_match($pattern, $content)){$msg = $this->get_label_by_field($field).'必需为正确的格式';$this->add_error($msg);return false;}return true;}public function city_required($field, $content, $param){if(empty($content) || $content=='9999'){$msg = $this->get_label_by_field($field).'必需选择到城市';$this->add_error($msg);return false;}return true;}/*** 验证最大值,包含等于*/public function max($field, $content, $param){if (intval($content) > intval($param)) {$msg = $this->get_label_by_field($field) . '不得大于' . $param . '';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}/*** 验证最小值,包含等于*/public function min($field, $content, $param){if (intval($content) < intval($param)) {$msg = $this->get_label_by_field($field) . '不得小于' . $param . '';$method_arr = explode(':', __METHOD__);$method = $method_arr[count($method_arr) - 1];$this->add_error($msg, $field, $method);return false;}return true;}}

用法:先引入上面文件,在调用,以下为调用方法。

/** =====数据验证===== */$this->load->library('form_validation');$rules = [['otaOrderId','订单标号','required'],['supplierId','供应商id','required'],['supplierPhone','供应商手机号','required|phone'],['contact','订单联系人','required'],['contact.phone','订单联系人手机号','required|phone'],['contact.name','订单联系人姓名','required'],['items','订单产品','required'],['items.id','合作方产品ID','required'],['items.sku','合作方产品sku','required'],['items.name','产品名称','required'],['items.props','产品sku属性','required'],['items.qty','下单数量','required|numeric'],['items.extra.name','产品额外信息字段名','required'],['items.extra.content','产品额外信息字段值','required'],];// 设置表单规则$this->form_validation->set_rules($rules);// 给表单赋值$this->form_validation->set_data($body);//表单验证是否符合规则$result = $this->form_validation->run();if( $result === false){$error = $this->form_validation->get_newone_error();$this->output(self::PARAM_IS_INVALID,$error);}/** =====数据验证结束=====*/

 

总结

以上是生活随笔为你收集整理的PHP表单提交参数验证类(可修改)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。