自动验证[1]

一. 验证规则
数据验证可以对表单中的字段进行非法的验证操作。一般提供了两种验证方式:静态定
义($_validate 属性)和动态验证(validate()方法)。

//验证规则

1 array(
2 array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
3 array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
4 ......
5 );

PS:验证字段、验证规则和错误提示这三项是必选的,大多数也是用这三项;而验证
条件、附加规则和验证时间是可选的。

验证字段:一般来说是表单的字段名,不一定必须和数据表匹配的,因为有一些比如密
码确认等辅助字段的存在。

验证规则:系统内置了常用的规则,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,表示值不为空的时候验证。

附加规则:配合验证规则使用,包括一下规则:

规则 说明
regex  正则验证,定义的验证规则是一个正则表达式(默认)
function 函数验证,定义的验证规则是一个函数名
规则 说明
regex  正则验证,定义的验证规则是一个正则表达式(默认)
function 函数验证,定义的验证规则是一个函数名
callback  方法验证,定义的验证规则是当前模型类的一个方法
confirm
验证表单中的两个字段是否相同,定义的验证规则是一
个字段名

equal 验证是否等于某个值,该值由前面的验证规则定义
notequal
验证是否不等于某个值,该值由前面的验证规则定义
(3.1.2版本新增)

in
验证是否在某个范围内,定义的验证规则可以是一个数
组或者逗号分割的字符串

notin
验证是否不在某个范围内,定义的验证规则可以是一个
数组或者逗号分割的字符串(3.1.2版本新增)

length
验证长度,定义的验证规则可以是一个数字(表示固定
长度)或者数字范围(例如3,12 表示长度从3到12的范
围)

between
验证范围,定义的验证规则表示范围,可以使用字符串
或者数组,例如1,31或者 array(1,31)

notbetween
验证不在某个范围,定义的验证规则表示范围,可以使
用字符串或者数组(3.1.2版本新增)

expire
验证是否在有效期,定义的验证规则表示时间范围,可
以到时间,例如可以使用 2012-1-15,2013-1-15 表示
当前提交有效期在2012-1-15到2013-1-15之间,也可
以使用时间戳定义

 ip_allow

验证 IP 是否允许,定义的验证规则表示允许的 IP 地址
列表,用逗号分隔,例如201.12.2.5,201.12.2.6

 ip_deny

验证 IP 是否禁止,定义的验证规则表示禁止的 ip 地址
列表,用逗号分隔,例如201.12.2.5,201.12.2.6

 unique

验证是否唯一,系统会根据字段目前的值查询数据库来
判断是否存在相同的值,当表单数据中包含主键字段时
unique 不可用于判断主键字段本身

验证时间:主要新增修改等验证。

1.self::MODEL_INSERT 或 1 新增数据时验证;
2.self::MODEL_UPDATE 或 2 编辑数据时验证;
3.self::MODEL_BOTH 或 3 全部情况下验证(默认)。

二. 静态定义

在模型类里预先定义好该模型的自动验证规则,就是静态定义。

在 Home/controller/UserController.class.php 插入以下代码:

 1 //控制器create()方法自动调用验证
 2 $user = D(‘User‘);
 3 $data[‘user‘] = ‘蜡笔小新‘; 4   if ($user->create($data)) {
 5 echo ‘所有数据验证成功!‘;
 6 } else {
 7 //输出错误信息
 8 var_dump($user->getError());
9 }

这时,在 Home/Model/UserModel.class.php 插入以下检测的代码:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4
 5 class UserModel extends Model {
 6     protected $_validate= array(
 7         array(‘user‘,‘require‘,‘用户名不得为空‘,0,‘regex‘,3),
 8         );
 9 }

array(‘user‘, ‘require‘, ‘用户不得为空!‘),   内置验证require,不得为空的用法,这时就会去验证 $data[‘user‘] = ‘蜡笔小新‘; 这个数值,如果$data[‘user‘]为空的话,就会

var_dump()出‘用户不的为空‘这条语句

需要注意的是 rray(‘user‘, ‘require‘, ‘用户不得为空!‘), 里的user是和 Home/controller/UserController.class.php  中 $data[‘user‘] = ‘蜡笔小新‘; 里的user是必须相同的

要不然就不能验证了。

ThinkPHP 提供了九种自动验证内置方案,具体如下:

1 //内置验证require,不得为空的用法
2 array(‘user‘, ‘require‘, ‘用户不得为空!‘),
1 //内置验证email,合法的邮箱格式
2 array(‘user‘, ‘email‘, ‘邮箱格式不合法!‘),
1 //内置验证email,合法的邮箱格式,而且必须要有http://   但是我试了,发现没有www是可行的
2 array(‘user‘, ‘email‘, ‘邮箱格式不合法!‘),
1 //内置验证url,验证网址是否合法
2 array(‘user‘, ‘url‘, ‘URL 路径不合法!‘),
1 //内置验证currency,验证是否为货币
2 array(‘user‘, ‘currency‘, ‘货币格式不正确!‘),
1 //内置验证zip,验证是否为六位整数邮政编码
2 array(‘user‘, ‘zip‘, ‘邮政编码格式不正确!‘),
1 //内置验证number,验证是否为正整数
2 array(‘user‘, number, ‘正整数格式不正确!‘),
1 //内置验证integer,验证是否为整数,正负均可
2 array(‘user‘, ‘integer‘, ‘整数格式不正确!‘),
1 //内置验证double,验证是否为浮点数,正负均可
2 array(‘user‘, ‘double‘, ‘整数格式不正确!‘),
1 //内置验证english,验证是纯英文
2 array(‘user‘, ‘english‘, ‘不是纯英文!‘),

ThinkPHP 还提供了附加规则,来提升自动验证的扩展性:

1 //附加规则regex,验证3-6位纯数字
2 array(‘user‘, ‘/^\d{3,6}$/‘, ‘不是 3-6 位纯正数字‘, 0, ‘regex‘),
1 //附加规则equal,验证是否和指定值相等
2 array(‘user‘, ‘张三‘, ‘值不对等‘, 0, ‘equal‘),
1 //附加规则notequal,验证是否与指定值不等
2 array(‘user‘, ‘张三‘, ‘值不能相等‘, 0, ‘notequal‘),
1 //附加规则confirm,验证两条字段是否相同
2 array(‘user‘, ‘name‘, ‘两个用户名对比不同!‘,0,‘confirm‘),

这时在 Home/controller/UserController.class.php  这应该要有$data[‘user‘]和$data[‘name‘]这两个参数,要不然就没有对比的了。

可以用在用户注册时,password和repassword,这样就能验证用户输入的密码是确定的。

1 //附加规则in,某个范围,可以是数组或逗号分割的字符串
2 array(‘user‘,  array(1,2,3), ‘不在指定范围‘, 0, ‘in‘),
3 array(‘user‘, ‘张三,李四,王五‘, ‘不在指定范围‘, 0, ‘in‘),
1 //附加规则notin,某个范围,可以是数组或逗号分割的字符串
2 array(‘user‘,  array(1,2,3), ‘不得在指定范围‘, 0, ‘notin‘),
3 array(‘user‘, ‘张三,李四,王五‘, ‘不得在指定范围‘, 0, ‘notin‘),
1 //附加规则length,验证长度或数字范围
2 array(‘user‘, ‘3‘, ‘不得小于 3 位‘, 0, ‘length‘),
3 array(‘user‘, ‘3,5‘, ‘不得小于 3 位,不得大于 5 位‘, 0, ‘length‘),
1 //附加规则between,验证某个范围,数字或逗号字符串
2 array(‘user‘,  array(3,5), ‘必须是 3-5 之间的数字‘, 0, ‘between‘),
3 array(‘user‘, ‘3,5‘, ‘必须是 3-5 之间的数字‘, 0, ‘between‘),
1 //附加规则notbetween,验证某个范围,数字或逗号字符串
2 array(‘user‘,  array(3,5), ‘必须不是 3-5 之间的数字‘, 0, ‘notbetween‘),
3 array(‘user‘, ‘3,5‘, ‘必须不是 3-5 之间的数字‘, 0, ‘notbetween‘),
时间: 2024-08-26 18:06:38

自动验证[1]的相关文章

ThinkPHP中create()方法自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方法没有数据即返回值为fals

AngularJS实现表单手动验证和表单自动验证

AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证.一.手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件: 1.给form元素加上novalidate="novalidate": 2.给form元素加上name="theForm",如下: <!DOCTYPE html> <html lang="en" ng-app="myApp1"

model中的自动验证 $_validate $_auto

普通模式: 1 <?php 2 class UserModel extends RelationModel{ 3 4 5 /**自动验证**/ 6 protected $_validate = array( 7 /**array([验证字段],[验证规则],[错误提示],(验证条件(默认为存在字段就验证)),(附加规则),(验证时间))**/ 8 array('username','','该用户名已经存在!',1,'unique'), 9 array('password','5,12','密码过

TP 自动验证规则

#自动验证 protected $_validate=array( #参数最后代表1 表示必须验证,0表示当这个字段存在的时候验证 array('username','require','账号不能为空',1), #只有添加的时候生效 array('password', 'require', '密码不能为空!', 1, 'regex', 1), array('password', 'require', '密码不能为空!', 1, 'regex', 4), #判断账号是否在数据库中存在 1表示添加时

thinkphp自动验证

1.thinkphp的自动验证 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 1.1应用范围: 进行数据类型.业务规则.安全判断等方面的验证. 1.2验证方式: 1.静态方式:在模型类里面通过$_validate属性定义验证规则. 2.动态方式:使用模型类的validate方法动态创建自动验证规则. 1.3验证规则: 例:一个简单的注册信息时的自动验证: <?php namespace Home\Model; use Thin

Thinkphp 中的自动验证 上一篇有例子

说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. array( array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]), ..... ); 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等.有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如e

2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大致了解 ①控制器代码页 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 5 header("Content-type: text/html; charset=utf-8"); 6 7 class AddCo

thinkphp自动验证和自动完成

tp验证码的自动验证小案例 模板文件 <form action="" method="post"> <p> User: <input type="text" name="name1" id=""> </p> <p> PASS: <input type="password" name="pass1" id

ThinkPHP 自动验证与自动填充无效可能的原因

原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关. create 方法语法如下: c

Thinkphp表单自动验证

之前项目经常用到,没做总结. 自动验证是Thinphp模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方