在 yii-1.1.10.r3566 版本中,yii自带的验证器共有 19 个。全部如下:

// CValidator.php
public static $builtInValidators=array('required'=>'CRequiredValidator',               // 验证属性值必需有值,不能为空'filter'=>'CFilterValidator',                          // 用过滤器转换属性的值'match'=>'CRegularExpressionValidator',    // 验证属性值匹配一个正则表达式'email'=>'CEmailValidator',                       // 验证属性值为有一个有效的Email地址'url'=>'CUrlValidator',                                // 验证属性值是一个有效的URL'unique'=>'CUniqueValidator',                    // 验证属性值在表中的对应列中是唯一的'compare'=>'CCompareValidator',              // 验证属性值与另一个属性的值相等'length'=>'CStringValidator',                      // 验证属性值的长度在一个范围内'in'=>'CRangeValidator',                           // 验证属性值在一个预定义列表中'numerical'=>'CNumberValidator',              // 验证属性值是数字'captcha'=>'CCaptchaValidator',                // 验证属性的值等于一个显示的CAPTCHA(验证码)的值'type'=>'CTypeValidator',                         // 验证属性值是一个指定的数据类型'file'=>'CFileValidator',                             // 验证属性值包含上传的文件'default'=>'CDefaultValueValidator',          // 验证属性值为分配的默认值'exist'=>'CExistValidator',                         // 验证属性值在表中的对应列中存在'boolean'=>'CBooleanValidator',               // 验证属性值是布尔值(true或false)'safe'=>'CSafeValidator',                         // 标记属性值为安全'unsafe'=>'CUnsafeValidator',                   // 标记属性值为不安全'date'=>'CDateValidator',                         // 验证属性值是日期
);

使用方法就是在 CActiveRecord 或 CFormModel 的子类中重写 rules() 函数,如下:

public function rules() {return array( array('username,email,password,password2', 'required'), array('username', 'length', 'min'=>6, 'max'=>24), array('email', 'email'), array('password', 'length', 'min'=>6, 'max'=>16), array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),);
}

rules() 中返回的数组一般如下:

array('属性名1,属性名2', '验证器别名', 'on'=>'场景', '验证器属性'=>'值', '...'=>'...')

array() 中前两个值是必须的,后面则是可选的,当然你要看具体验证器了

当有多个属性要使用同一个验证器时,可以写在同一条规则中,属性名使用英文逗号分隔

验证器别名是必须的

'on'=>'场景' 是可选的, 场景是在初始化某个具体的 CActiveRecord 类时通过构造函数设定的。
如:

class Post extends CActiveRecord

在控制器类中

$model=new Post('search'); 其中 'search' 就是场景,这样就设置了场景。当然,CActiveRecord 类的构造函数中,场景的默认值是 'insert'然后,验证器属性则要看某个具体验证器了,如
class CStringValidator extends CValidator{public $max;public $min;public $is;public $tooShort;public $tooLong;public $allowEmpty=true;public $encoding;
}

1.

CRequiredValidatorCRequiredValidator validates that the specified attribute does not have null or empty value.

用法:array('username, email, password,sex', 'required', 'message'=>Yii::t('user','{attribute}不能为空!')),
或者 array ('username','required','requiredValue'=>100, 'message'=>Yii::t('user','{attribute}必须为100!')),
看源码是判断给定属性是否是requiredValue或者空 然后JS messages.push出提示信息 进行客户端验证

2.

 CFilterValidatorCFilterValidator transforms the data being validated based on a filter.   CFilterValidator is actually not a validator but a data processor.必须是个有效的回调函数 is_callable / a valid callback写不对的话常常爆 属性 "CFilterValidator.0" 未被定义. 的 CException用法:
public function rules() {return array (// username and password are required/* array ('username, password','required','message' => Yii::t ( 'user', '{attribute}不能为空' )), */
array('username','filter','filter'=>array($this,'DataProcessor')),// rememberMe needs to be a booleanarray ('rememberMe','boolean'),// password needs to be authenticatedarray ('password','authenticate'));}function DataProcessor(){return "abc";}


'filter'=>array($this,'DataProcessor') $this是指这个类 这个类里面的DataProcessor函数譬如说

if (isset ( $_POST ['LoginForm'] )) { $model->attributes = $_POST ['LoginForm']; $model->validate(); print_r($model->attributes);exit;不管你输入什么 最后都过滤成了abcArray ( [username] => abc [password] =>  [rememberMe] => 0 )

一般习惯调用PHP自带函数 过滤左右空格 array('username', 'filter', 'filter'=>'trim'), 3. CRegularExpressionValidator 3个参数 pattern allowEmpty  not用法: array ( 'mobile', 'match', 'pattern' =>'/^13[0-9]|15[^4,\\D]|18[0,5-9]\\d{8}$/',  'message' => Yii::t ( 'activity', '无效的{attribute}' ), ),上面就是自己写个正则匹配手机号码格式

 4.CEmailValidator 用法:array('email', 'email'),多email验证自己写个小验证器:
public function rules(){return array(array('email, title, body', 'required', 'message'=>Yii::t('user','{attribute}不能为空')),array('email','mailValidator'),);}/*** 客观需求,CEmailValidator已经不能满足要求* 先分割后判断*/public function mailValidator(){$singleEmail = strtok($this->email,' ');while ($singleEmail !== false){$validator = new CEmailValidator;if(!$validator->validateValue($singleEmail)){$this->addError('email', Yii::t('user', '邮箱').'格式不正确!');//throw new Exception('Email is invalid', '30201');}//echo "$singleEmail<br />";$singleEmail = strtok(" ");}}
5.CUrlValidator
用法:array('urlname','url','validSchemes'=>array('http','https')),这样就只有http和https开头的符合正则pattern的url才是可以通过验证的url
6.CUniqueValidatorCUniqueValidator validates that the attribute value is unique in the corresponding database table.
用法:array('username','unique','className'=>'User'),//User为Model,username在user中不允许重复

 7.CCompareValidator 用法:array('exchange','compare','operator'=>'>', 'compareValue'=>1, 'message'=>Yii::t('trader', '{attribute} 必须为正数!')),//>0 array('exchange','compare','operator'=>'<=', 'compareValue'=>100, 'message'=>Yii::t('trader', '{attribute} 不能超过100!')),//<=100属性跟特殊值比较

或者:array (
'conpassword',
'compare',
'compareAttribute' => 'password'
),
属性跟属性比较

 8.CStringValidator用法:array('username','length','max'=>12,'min'=>2, 'tooLong'=>Yii::t('user', '{attribute}至多12个字符'), 'tooShort'=>Yii::t('user', '{attribute}至少2个字符'), 'encoding'=>'utf-8'), array('password','length','max'=>16,'min'=>6, 'tooLong'=>Yii::t('user', '{attribute}至多16个字符'), 'tooShort'=>Yii::t('user', '{attribute}至少6个字符')),
 9.CRangeValidator用法:array('reward','in',array(1,10,100,1000)),
 reward在特定数组值内,譬如上面 reward只能有4个选择

 10.CNumberValidator

CNumberValidator validates that the attribute value is a number.
用法:array('username','numerical','integerOnly'=>true,'min'=>0,'max'=>1000,
'tooBig'=>Yii::t('user', '{attribute}不能大于1000'),
'tooSmall'=>Yii::t('user', '{attribute}必须大于0'),
),

 11.CCaptchaValidator 用法:array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>'three'),
 12.CTypeValidator Valid values include 'string', 'integer', 'float', 'array', 'date', 'time' and 'datetime'. 用法:array('username','type','type'=>'date','dateFormat'=>'MM/dd/yyyy'),

 13.CFileValidator用法:array('filename', 'file', 'allowEmpty'=>true, 'types'=>'zip, rar, xls, pdf, ppt'),
 14.CDefaultValueValidator用法:array('created','default','value'=>new CDbExpression('NOW()'),'setOnEmpty'=>false),

 15.CExistValidator

用法:array('username','exist','className'=>'User'),

 18.CUnsafeValidator 19.CDateValidator用法:array('username','date','format'=>'yyyy-MM-dd'),

在Yii中虽然有19个内置的验证器,但是有时候并不能满足我们的要求,这时就需要自定义一个符合自己要求的验证器了。

1、在验证器validator类中有一个createValidator方法,没有具体研究。

2、另一种方法是自己重新定义一个验证器类,重新写一个类。具体方法如下:

  1. 将 framework中提供的默认校验类(这里以CUniqueValidator为例)复制到自己的web应用目录 extensions\validator下(该目录不存在,自己建一个就行),更换一个文件名,假设为 ZUnique.php。打开文件,相应类名也更改,校验方法根据自己需要修改。

  2. 配置config/main.php,import项增加一个条目
    'application.extensions.validator.*',

  3. 在模型类的rules方法中引用,如:
    array('username,', 'ZUniqueValidator');

提醒:可以到官方extensions下载一些现成validator试用。

自己也可以自己写验证表达式(正则式)

array('user_qq','match','pattern'=>'/[1,9]\d{8,10}/','message'=>'qq号码输入不正确');///验证qq号码是否是符合

array('user_addr','in','range=>array(1,2,3,4)','message'=>'你选择的地址信息不正确');验证选择的信息 是否是1 2 3 4 中的任意一个

你也可以自定义函数 进行验证

array('user_name','user_check',''),

然后在该model文件中 自定义函数user_check 对user_check进行验证

public function user_check(){

$len = strlen($this->user_name);

if ($len<2 ){

$this->addError('user_name','你的名字太短了');为user_name 增加错误信息,不可以替换

}

}

转载于:https://blog.51cto.com/johnzxw/1316908

yii 验证器类 细说YII验证器相关推荐

  1. 【Django入门】——模型管理器对象、模型管理器类和模型类

    文章目录 一.模型管理器对象 1. 自定义模型管理器对象 2. 自定义模型管理器类 3. 自定义模型管理器类应用 3.1 重写框架的方法 3.2 封装自定义方法 4. 模型管理器对象的`model`属 ...

  2. php validator,实用的PHP验证器类Validator

    使用composer安装 提供非常方便的composer安装: composer require particle/validator 使用 在使用之前请确保在项目中引入了 vendor/autolo ...

  3. springmvc 拦截器、国际化、验证

    2019独角兽企业重金招聘Python工程师标准>>> springmvc 拦截器 继承了HandlerIntercepter的类可以作为拦截器类: package com.yawn ...

  4. php验证器的调用,ThinkPHP5 验证器的具体使用

    这篇文章主要介绍了关于ThinkPHP5 验证器的具体使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言: 我们在做API开发的时候,我们会接受客户端传来的参数,大家都知道这个参 ...

  5. Java web登录拦截器_SpringMVC拦截器(实现登录验证拦截器)

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 核心代码 首先是index.jsp,显示链接 String path = request.getContextPath(); String ...

  6. jsf表单验证_JSF验证示例教程–验证器标签,定制验证器

    jsf表单验证 JSF validation model defines a set of standard classes for validating the UI components. The ...

  7. python用户登录(输入用户名和密码)dic_Python使用装饰器模拟用户登陆验证功能示例...

    本文实例讲述了Python使用装饰器模拟用户登陆验证功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 user_list = [ {'name' ...

  8. Django 表单验证之自定义表单验证器

    本文基于Django 表单验证 一文,补充完善表单验证器之自定义表单验证器 具体步骤总结如下: 第一:在formValidation.py 文件中,添加自定义名称敏感验证器(NameValidatio ...

  9. c 自定义实现string类 clear_有关类加载器的总结

    对于java开发来说,classLoader往往是容易被我们忽视的一个重要知识点.而classLoader对java的发展也有很大的影响.例如. 早期的applet应用,通过网络远程加载class文件 ...

最新文章

  1. 揭开AI产品PRD的面纱,浅谈其和互联网产品PRD的异同
  2. java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点
  3. amazon rds 性能_Amazon S3 —云文件存储可提高性能并节省成本
  4. c++解析csv 存入数组_Python读写csv文件专题教程(2)
  5. Python 函数详解
  6. 开源软件,自由软件,免费软件三者的区别
  7. ssm毕设项目自来水收费管理系统7yd5p(java+VUE+Mybatis+Maven+Mysql+sprnig)
  8. LPC1788 NVIC 的设置
  9. 微信公众号服务号模板消息群发功能怎么使用
  10. 微信支付(小程序)-商户号配置与小程序配置
  11. java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
  12. 《等一朵花开》读书感悟
  13. 阿里巴巴 html圆代码,阿里巴巴国际站HTML代码全透视
  14. Nebula Graph - 基于Docker 安装 及 Studio
  15. Win10 安装Docker 杂记
  16. 水溶性量子点CdSe/ZnS
  17. 手机号 mysql 索引_mysql索引以及优化
  18. WIN7 shutdown 定时/倒计时 命令关机
  19. 课程设计:c++实现学生成绩管理系统
  20. javaAPI文档中文版(JDK11在线版)无需下载、直接打开

热门文章

  1. Java 基础数据类型
  2. Leet Code OJ 简单(二)
  3. 新CCIE笔记之'口口相传'路由协议
  4. Nginx配置防盗链
  5. MySQL多实例的安装
  6. 用MathType编辑带点星号的流程
  7. Instruments模板介绍(更新中...)
  8. C语言树形打印二叉树
  9. java NIO概述
  10. 记一次小的51CTO聚会