//array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
protected $_validate = array( );

ThinkPHP 自动验证定义的附加规则如下:

  1. regex:使用正则进行验证(默认)
  2. unique:验证唯一性
  3. confirm:验证表单中的两个字段是否相同
  4. equal:验证是否等于某个值
  5. in:验证是否在某个范围内
  6. function:使用函数验证
  7. callback:使用方法验证

自动验证例子

各种自动验证参考例子如下:

// 默认情况下用正则进行验证
array('title','require','标题不能为空。'),
array('order','number','排序必须是数字。',2),
array('email','email','邮箱格式不符合要求。'),
array('qq','qq','QQ号码不正确。'), // 在新增的时候验证标题title字段是否唯一
array('title','','标题已经存在!',0,'unique',1), // 验证确认密码是否和密码一致
array('repassword','password','确认密码不正确。',0,'confirm'), // 验证class填写的值为 一班
array('class','一班','班级必须填写一班。',0,'equal'), // 当值不为空的时候判断是否在一个范围内
array('value',array(1,2,3),'值的范围不正确。',2,'in'), // 自定义函数验证用户名格式
array('username','checkName','用户名格式不正确。',0,'function'), // 在注册或更改资料是调用 checkEmail 方法检查邮箱
array('email','checkEmail',1,'callback'),

使用正则表达式(regex)验证

上述几类附加规则中,使用正则表达式是经常使用的,也是系统默认的验证附加规则。系统内置了如下正则检测规则:

require(必须)、email(邮箱格式)、url(URL地址)、currency(货币)、number(数字)、qq(QQ号码)、english(英文字符)。

这些附加规则可以直接使用,如果这些附加规则无法满足要求,可以使用自定义的正则规则:

该规则要求用户名只能为英文字符及下划线和数字组成,且长度为3-15个字节。

要了解更多的正则表达式规则参见《PHP 常用正则表达式整理》。

使用自定义函数(function)验证

使用自定义函数验证附加规则,函数可以是 Common/common.php 里的自定义函数,也可以是 PHP 的内置函数:

class UserModel extends Model{
protected $_validate = array(
array('username','checkName','用户名不符合要求。',0,'function'),
};
}

自定义 checkName 函数:

function checkName($username){
if(!preg_match('/^{3,15}$/', $username)){
return false;
}else{
return true;
}
}

提示:对于用户名的规则可以直接使用正则验证而无需函数,在此只是为了演示自定义函数的验证的用法而已。

使用方法(callback)验证

ThinkPHP 自动验证还支持调用当前 Model 类的一个方法来进行验证。

class UserModel extends Model{
protected $_validate = array(
array('email','checkEmail','邮箱已经存在。',1,'callback'),
}; // checkEmail方法
protected function checkEmail(){
$User=new Model('User');
// 新用户注册,验证唯一
if(empty($_POST<'uid'>)){
if($user->getByEmail($_POST<'email'>)){
return false;
}else{
return true;
}
}else{
// 更改资料判断邮箱与其他人的邮箱是否相同
if($user->where("uid!={$_POST<'uid'>} and email='{$_POST<'email'>}'")->find()){
return false;
}else{
return true;
}
}
}
}

当 checkEmail 方法返回 false 时,验证就不通过。

可见 ThinkPHP 自动验证功能十分强大,能满足对表单的各种验证要求。

ThinkPHP 自动验证实例的更多相关文章

  1. ThinkPHP 自动验证与自动填充无效可能的原因(转)

    自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...

  2. <转>thinkphp自动验证无效的问题

    新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...

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

    原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...

  4. thinkphp自动验证无效的问题

    新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...

  5. thinkphp自动验证---$_validate

    thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...

  6. ThinkPHP自动验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...

  7. thinkphp自动验证分析

    thinkphp有一个自动验证的方法验证规则如下 array( array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段2,验证规则,错误提示,[验证条件 ...

  8. thinkphp自动验证详解

    自动验证时THINKPHP提供的一种比较好的验证方式,可以在使用create创建数据对象的时候自动进行数据验证. 数据进行自动验证的方式有两种: 1.静态方式:在模型类里面通过$_validate属性 ...

  9. Thinkphp自动验证规则

    其实说白了,这篇文章就是转给自己看的,省的下次用的时候满网络找了.有需要的同学也可以看看.自动验证是非常有用的一个技术.平常的验证基本就是,用户名是否为空,用户名是否重复,密码,重复密码是否一致.官方 ...

随机推荐

  1. ADB shell出现error:device offline提示

    解决办法: 1.adb kill-server 2.adb start-server 3.adb remount执行这3个命令然后重新键入adb shell应该就可以了

  2. Quartz 2D 初步

    转载自:http://www.cofcool.net/development/2015/06/17/ios-study-note-six-Quartz2D/ Quartz 2D是一个二维绘图引擎,同时 ...

  3. 转:web_submit_data函数

    web_submit_data函数处理无状态或者上下文无关的表单提交.它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的.发送这些请求时不需要表单上下文. 函数语法:Int ...

  4. Android App监听软键盘按键的三种方式(转)

    最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言:   我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“G ...

  5. zencart里常用 SQL

    1.如何替换某个字段的一些字符 如我把products表的products_image字段中包含2011的字符替换成Zencart2012update `products` set `products ...

  6. thinkphp 5.0 命名空间

    命名空间 命名空间 ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制. 如果不清楚命名空间 ...

  7. JAVA基础--super关键字

    子类对象new的时候堆里的内存分配: 1. 父类成员变量 2. 子类成员变量 3. this对象指向自己 4. super对象指向父类 super调用父类的方法: class FatherClass ...

  8. Android源码之Gallery专题研究(2)

    引言 上一篇文章已经讲解了数据加载过程,接下来我们来看一看数据加载后的处理过程.按照正常的思维逻辑,当数据加载之后,接下来就应该考虑数据的显示逻辑. MVC显示逻辑 大家可能对J2EE的MVC架构比较 ...

  9. column name is keyword from

    mysql: select tablename.from from tablename; postgresql: select "from" from tablename; sql ...

  10. 《JavaScript语言精髓与编程实践》读书笔记

    JavaScript语言精髓与编程实践读书笔记 function v1(v1){ v1 = 100; alert('v1:'+v1); } function v2(name){ v1.apply(th ...