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表单提交参数验证类(可修改)相关推荐
- 怎么实现Web系统URL传输(表单提交)参数加密-zhuan
using System; using System.Security.Cryptography; using System.IO; using System.Text; namespace EIP. ...
- UI标签库专题三:JEECG智能开发平台 FormValidation(表单提交及验证标签)
1. FormValidation(表单提交及验证标签) 1.1. 参数 属性名 类型 描述 是否必须 默认值 action string 表单提交路径 否 null formid strin ...
- html form提交前验证,form表单提交前验证实现方法
form表单提交前验证实现方法2017-11-26 20:54 form表单提交是网站中最常见的,基本上所有的网站都会用到. 除非你就一些静态网页,仅仅是展示,而不需要互动,所以不需要提交表单. 但是 ...
- 输入值/表单提交参数过滤,防止sql注入或非法攻击的方法
输入值/表单提交参数过滤,防止sql注入或非法攻击的方法: /** * 过滤sql与php文件操作的关键字 * @param string $string * @r ...
- php:输入值/表单提交参数过滤,防止sql注入或非法攻击的方法
输入值/表单提交参数过滤,防止sql注入或非法攻击的方法: /*** 过滤sql与php文件操作的关键字* @param string $string* @return string* @author ...
- php 表单提交及验证 tp,ThinkPHP表单自动提交验证实例教程
ThinkPHP表单自动提交验证实例教程 附加规则 配合验证规则使用,包括: function 使用函数验证,前面定义的验证规则是一个函数名 callback 使用方法验证,前面定义的验证规则是一个当 ...
- html表单提交前验证,jquery表单提交前实现同步验证(附代码)
jquery表单提交前实现同步验证 .int{ height: 30px; text-align: left; width: 600px; } label{ width: 200px; margin- ...
- 如何在 HTML form 表单提交时验证信息!?
前言:平常老用ajax直接向后台传数据,form 表单不常用都生疏了,今天遇到了一个相关问题,搞了半天,特此记录. 用from表单提交,会遇到一个问题就是,当你点击提交按钮时,直接就把数据传过去了,无 ...
- iview 表单提交之前验证是否符合条件
在表单提交之前 调用接口校验用户输入是否符合条件 符合则通过, 不符合 不让提交 <Card :title="title"><Form class="m ...
最新文章
- Object-C---gt;Swift之(三)nil合并运算符、范围运算符
- C++ static与const用法详解
- 开源一些Delphi系统:诗词成语字典
- 虚拟机ubuntu安装ssh服务器,经过Xshell远程链接虚拟机VMVARE中的Ubuntu
- WP8.1学习系列(第九章)——透视Pivot开发指南
- react如何获取表单数据
- 【算法学习】堆排序(Heap Sorting)
- Minor GC和Full GC触发条件
- js中递归调用返回值为undefined问题
- 2018年,AI会在金融行业哪些方向上发力?
- Enabled AWE
- CentOS7下安装配置Tomcat环境
- Linux虚拟文件系统(节点路径搜索)
- 用matlab如何画六边形,matlab怎样直接画出六边形
- matlab仿真模糊PID控制,基于Matlab的模糊PID控制器的设计和仿真
- P4173 残缺的字符串(带通配符的字符串匹配,FFT)
- 2010年会考计算机试题,2010年浙江省信息技术会考试题 选择题 - 多媒体 - 图文
- BGP线路是什么意思?BGP双线的优点是什么?
- 美国计算机专业gre314,托福89,GRE 314获南加大计算机录取
- python-二维嵌套列表的元素删除、更改大小写