2020-04-18

一、验证规则
1、验证规则数据验证可以对表单中的字段进行非法验证操作。一般提供了两种验证方式:静态定义($_validate属性)和动态验证(validate()方法)。//验证规则array{ array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), …}123456PS:验证字段、验证规则和错误提示这三项是必选的,大多数也是用这三项;而验证条件、附加规则和验证时间是可选的。验证字段:一般来说是表单的字段名,不一定必须和数据表匹配,因为有一些比如密码确认等辅助字段的存在。验证规则:系统内置了常用的规则,require(字段必填)、email(邮箱格式)、url(url格式)、currency(货币)、number(正整数)、integer(整数)、double(浮点数)、zip(邮政编码)、english(英文)。这些规则都默认采用的附加规则是regex,正则表达式验证,只不过是设定好的。错误提示:验证失败后的提示。验证条件:共三种:1)self::EXISTS_VALIDATE或0,表示存在字段就验证(默认)(就是数据提交过来了才进行验证);2)self::MUST_VALIDATE或1,表示必须验证(不论有没有字段都需要验证);3)self::VALUE_VALIDATE或2,表示值不为空的时候验证(就比如邮箱,可填可不填的情况下,填了就验证合法性,没填就直接略过)。123附加规则:配合验证规则使用,包括以下规则:规则 说明regex 正则验证,定义的验证规则是一个正则表达式(默认)function 函数验证,定义的验证规则是一个函数名callback 方法验证,定义的验证规则是当前模型类的一个方法confirm 验证表单中的两个字段是否相同,定义的验证规则是一个字段名equal 验证是否等于某个值,该值由前面的验证规则定义notequal 验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)in 验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串notin 验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串length 验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12表示长度从3到12的范围)between 验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)notbetween 验证不在某个范围,定义的验证规则表示范围,可以使用字符串或者数组expire 验证是否在有效期,定义的验证规则表示时间范围,可以到时间,例如可用2018-1-15,2019-1-15表示当前提交有效期在2018-1-15到2019-1-15之间,也可以使用时间戳定义ip_allow 验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6ip_deny 验证IP是否禁止,定义的验证规则表示禁止的IP地址列表,可用逗号分隔,如192.168.1.1,192.168.1.100unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值;当表单数据中包含主键字段时unique不可用于判断主键字段本身验证时间:主要新增修改等验证。1)self::MODEL_INSERT或1表示新增数据时验证;2)self::MODEL_UPDATE或2表示标记数据时验证;3)self::MODEL_BOTH或3表示全部情况下验证(默认)。1232、静态定义在模型类里预先定义好该模型的自动验证规则,就是静态定义。//模型类定义验证规则<?phpnamespace Home\Model;Use Think\Model;class UserModel extends Model{ protected $_validate = array( //分别对应上面的部分,user为字段,require为验证规则,然后是错误提示,验证条件,附加规则,验证时间 array('user','require','用户名不得为空',0,'regex',3), array(), );}?>123456789101112131415为了测试方便,我们直接通过模拟提交POST。//控制器create()方法自动调用验证 u s e r = D ( ′ U s e r ′ ) ; user = D('User'); user=D(User);data[‘user’] = ‘某某人’; d a t a [ ′ p a s s ′ ] = ′ 12 3 ′ ; i f ( data['pass'] = '123';if( data[pass]=123;if(user->create(KaTeX parse error: Expected '}', got 'EOF' at end of input: …信息 var_dump(user->getError());}12345678910TP框架提供了9种自动验证内置方案,具体如下://内置验证require,非空检测array(‘user’,‘require’,‘用户名不得为空’);12//内置验证email,邮箱格式合法性检测array(‘user’,‘email’,‘邮箱格式不合法’);12//内置验证URL,网址合法性检测array(‘user’,‘url’,‘URL路径不合法’);12//内置验证currency,货币格式检测array(‘user’,‘currency’,‘货币格式不正确’);12//内置zip,邮编格式检测array(‘user’,‘zip’,‘邮政编码格式不正确’);12//内置验证number,正整数检测array(‘user’,‘number’,‘非正整数’);12//内置验证integer,整数验证,正负均可array(‘user’,‘integer’,‘整数格式不正确’);12//内置验证double,验证是否为浮点数array(‘user’,‘double’,‘必须是浮点数’);12//内置验证english,纯英文检测array(‘user’,‘english’,‘不是纯英文’);12TP框架还提供了附加规则,来提示自动验证的扩展性://附加规则regex,验证3-6位纯数字array(‘user’,’/^d{3,6} / ′ , ′ 不 是 3 − 6 位 纯 数 字 ′ , ′ 0 ′ , ′ r e g e x ′ ) ; 12 / / 附 加 规 则 e q u a l , 验 证 是 否 和 指 定 值 相 等 a r r a y ( ′ u s e r ′ , ′ 某 某 某 ′ , ′ 值 不 对 等 ′ , ′ 0 ′ , ′ e q u a l ′ ) ; 12 / / 附 加 规 则 n o t e q u a l , 验 证 是 否 与 指 定 值 不 等 a r r a y ( ′ u s e r ′ , ′ 某 某 某 ′ , ′ 值 不 能 对 等 ′ , ′ 0 ′ , ′ n o t e q u a l ′ ) ; 12 / / 附 加 规 则 c o n f i r m , 验 证 两 条 字 段 是 否 相 同 / / 也 可 用 于 密 码 和 重 复 密 码 验 证 a r r a y ( ′ u s e r ′ , ′ n a m e ′ , ′ 两 个 用 户 名 对 比 不 同 ′ , ′ 0 ′ , ′ c o n f i r m ′ ) ; 123 / / 附 加 规 则 i n , 某 个 范 围 , 可 以 是 数 组 或 逗 号 分 隔 的 字 符 串 / / 与 之 对 应 的 是 n o t i n a r r a y ( ′ u s e r ′ , a r r a y ( 1 , 2 , 3 ) , ′ 不 在 指 定 范 围 ′ , ′ 0 ′ , ′ i n ′ ) ; a r r a y ( ′ u s e r ′ , ′ 张 三 , 李 四 , 王 五 ′ , ′ 不 在 指 定 范 围 ′ , ′ 0 ′ , ′ i n ′ ) ; 1234 / / 附 加 规 则 l e n g t h , 验 证 长 度 或 数 字 范 围 a r r a y ( ′ u s e r ′ , ′ 3 ′ , ′ 不 得 小 于 3 位 ′ , ′ 0 ′ , ′ l e n g t h ′ ) ; a r r a y ( ′ u s e r ′ , ′ 3 , 5 ′ , ′ 不 得 小 于 3 位 , 不 得 大 于 5 位 ′ , ′ 0 ′ , ′ l e n g t h ′ ) ; 123 / / 附 加 规 则 b e t w e e n , 验 证 某 个 范 围 , 数 字 或 逗 号 字 符 串 / / 与 之 对 应 的 是 n o t b e t w e e n a r r a y ( ′ u s e r ′ , a r r a y ( 3 , 5 , ) , ′ 必 须 是 3 − 5 之 间 的 数 字 ′ , ′ 0 ′ , ′ b e t w e e n ′ ) ; a r r a y ( ′ u s e r ′ , ′ 3 , 5 ′ , ′ 必 须 是 3 − 5 之 间 的 数 字 ′ , ′ 0 ′ , ′ b e t w e e n ′ ) ; 1234 / / 附 加 规 则 e x p i r e , 设 置 有 效 时 间 范 围 , 必 须 是 通 过 表 单 提 交 才 有 效 , 可 以 是 时 间 戳 a r r a y ( ′ u s e r ′ , ′ 2017 − 1 − 1 , 2018 − 1 − 1 ′ , ′ 时 间 已 过 期 ′ , ′ 0 ′ , ′ e x p i r e ′ ) ; 12 / / 附 加 规 则 i p d e n y , I P 禁 止 访 问 列 表 / / 与 之 对 应 的 是 i p a l l o w − − − − I P 允 许 a r r a y ( ′ u s e r ′ , ′ 127.0.0. 1 ′ , ′ 当 前 I P 禁 止 ′ , ′ 0 ′ , ′ i p d e n y ′ ) ; 123 上 面 是 已 经 定 义 好 的 , 如 果 系 统 未 定 义 的 就 是 通 过 其 他 方 法 如 : / / 附 加 规 则 c a l l b a c k , 回 调 验 证 a r r a y ( ′ u s e r ′ , ′ c h e c k l e n g t h ′ , ′ 用 户 名 必 须 在 3 − 5 位 ′ , ′ 0 ′ , ′ c a l l b a c k ′ , 3 , a r r a y ( 3 , 5 ) ) ; / / 回 调 方 法 p r o t e c t e d f u n c t i o n c h e c k l e n g t h ( /','不是3-6位纯数字','0','regex');12//附加规则equal,验证是否和指定值相等array('user','某某某','值不对等','0','equal');12//附加规则notequal,验证是否与指定值不等array('user','某某某','值不能对等','0','notequal');12//附加规则confirm,验证两条字段是否相同//也可用于密码和重复密码验证array('user','name','两个用户名对比不同','0','confirm');123//附加规则in,某个范围,可以是数组或逗号分隔的字符串//与之对应的是notinarray('user',array(1,2,3),'不在指定范围','0','in');array('user','张三,李四,王五','不在指定范围','0','in');1234//附加规则length,验证长度或数字范围array('user','3','不得小于3位','0','length');array('user','3,5','不得小于3位,不得大于5位','0','length');123//附加规则between,验证某个范围,数字或逗号字符串//与之对应的是notbetweenarray('user',array(3,5,),'必须是3-5之间的数字','0','between');array('user','3,5','必须是3-5之间的数字','0','between');1234//附加规则expire,设置有效时间范围,必须是通过表单提交才有效,可以是时间戳array('user','2017-1-1,2018-1-1','时间已过期','0','expire');12//附加规则ip_deny,IP禁止访问列表//与之对应的是ip_allow ----IP允许array('user','127.0.0.1','当前IP禁止','0','ip_deny');123上面是已经定义好的,如果系统未定义的就是通过其他方法如://附加规则callback,回调验证array('user','checklength','用户名必须在3-5位','0','callback',3,array(3,5));//回调方法protected function checklength( /,36,0,regex);12//equalarray(user,,,0,equal);12//notequalarray(user,,,0,notequal);12//confirm//array(user,name,,0,confirm);123//in//notinarray(user,array(1,2,3),,0,in);array(user,,,,,0,in);1234//lengtharray(user,3,3,0,length);array(user,3,5,35,0,length);123//between//notbetweenarray(user,array(3,5),35,0,between);array(user,3,5,35,0,between);1234//expirearray(user,201711201811,,0,expire);12//ipdenyIP访//ipallowIParray(user,127.0.0.1,IP,0,ipdeny);123//callbackarray(user,checklength,35,0,callback,3,array(3,5));//protectedfunctionchecklength(str, m i n , min, min,max){ preg_match_all("/./u", s t r , str, str,matches); l e n = c o u n t ( len = count( len=count(matches[0]); if( l e n < len< len<min|| l e n > len> len>max){ return false; }else{ return ture; }}12345678910111213//另一种是附加规则function,函数验证array(‘user’,‘checklength’,‘用户名必须在3-5位’,‘0’,‘function’,3,array(3,5));//在Common文件夹下的Common文件夹建立function.php文件,会自动加载function checklength( s t r , str, str,min,KaTeX parse error: Expected '}', got 'EOF' at end of input: …tch_all("/./u",str,$matches); l e n = c o u n t ( len = count( len=count(matches[0]); if( l e n < len< len<min|| l e n > len> len>max){ return false; }else{ return ture; }}12345678910111213如果有多个字段都包含错误,默认只显示一个错误。 当想显示全部错误的时候,可以说盒子属性//批量验证protected $patchValidate = true;12如果是直接POST过来的,直接用create()方法即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值