官方文档:
http://www.yiichina.com/guide/form.model
类参考手册:
http://www.yiichina.com/api/CValidator
http://www.php100.com/manual/yii/index.html Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证public array rules ()

{ .......}

array 要调用 validate() 时应用的有效性规则。返回属性的有效性规则。

声明验证规则,应重写此方法。 每个规则是数组具有以下结构:

array('attribute list', 'validator name', 'on'=>'scenario name', ...validation parameters...)

注:attribute list: 指定属性 (以逗号分隔) 进行验证 ;

validator name: 指定要使用的验证程序。 它可以是方法的一个模型类的一个内置的验证器或验证程序类 (或其路径的别名) 名称的名

称。 一种验证方法必须具有以下签名:

// $params refers to validation parameters given in the rulefunction validatorName($attribute,$params)

内置的验证程序是指在 CValidator::builtInValidators 中声明的验证程序之一。 验证程序的类是扩展 CValidator 的类。

on: 应执行有效性规则时,此选项指定的情形。 用逗号分开不同的方案。 如果未设置此选项,将在任何情况下应用规则。 请 方案 中有关

此选项的更多详细信息,参阅。

附加参数用于初始化相应的验证程序属性。 请参阅 individal 验证器类 API 可能的属性。

实例:

public function rules()
{
        return array(
            array('username, password, passwordConfirm, email, verifyCode', 'required'),
            array('username, password, passwordConfirm, email', 'length', 'min'=>5 ,'max'=>128),
            array('username', 'unique'),
            array('email','email'),
            array('passwordConfirm', 'compare', 'compareAttribute' => 'password'),
            array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'message'=>'验证码输入不正确,请重新输入'), 
        );
}

预定义完整列表:

setFlash(), getFlash()可以完成验证成功后提示
2.errorSummary验证不通过的错误提示
rules()方法中定义的规则会在模型实例调用其 validate() 或 save() 方法时逐一执行。normalizeTags验证器是一个基于方法的验证器,Models/xx.php中的rules()的验证规则是对数据库表进行 的,Models/xxForm.php中的rules()的验证规则是对表单进行的,和数据库表没有关系,类名和文件名要相同 。
如果我们使用一个validator(验证器)类,则这个类必须继承CValidator。其实有三种方法可以指定validator(验证器),包括前面提到的一种格式:
1.第一种是在模型类中定义验证方法
2.第二种是指定一个单独的验证器类(这个类继承validators/CValidator )。
3.第三种是你可以使用Yii框架中现有的验证器,指定预定义的验证器别名即可。
Yii为你提供了很多预定义的验证器类,同时也指定了别名,用在定义规则时。Yii1.1版本,预定义的验证器别名的完整列表如下:
* boolean:它是CBooleanValidator类的别名,验证属性的值是布尔值(true或false)。
* captcha:它是CCaptchaValidator类的别名,验证属性的值等于一个显示的CAPTCHA(验证码)的值。
* compare:它是CCompareValidator类的别名,验证属性的值与另一个属性的值相等。
* email:它是CEmailValidator类的别名,验证属性的值为有一个有效的Email地址。
* default:它是CDefaultValidator类的别名,验证属性的值为分配的默认值。
* exist:它是CExistValidator类的别名,验证属性的值在表中的对应列中存在。
* file:它是CFileValidator类的别名,验证属性的值包含上传的文件。
* filter:它是CFilterValidator类的别名,用过滤器转换属性的值。
* in:它是CRangeValidator类的别名,验证属性值在一个预定义列表中。
* length:它是CStringValidator类的别名,验证属性值的长度在一个范围内。
* match:它是CRegularExpressionValidator类的别名,验证属性值匹配一个正则表达式。
* numerical:它是CNumberValidator类的别名,验证属性值是数字。
* required:它是CRequiredValidator类的别名,验证属性值必需有值,不能为空。
* type:它是CTypedValidator类的别名,验证属性值是一个指定的数据类型。
* unique:它是CUniquedValidator类的别名,验证属性值在表中的对应列中是唯一的。
* url:它是CUrlValidator类的别名,验证属性值是一个有效的URL。
1.自定义规则验证
然后在模型(model)的:
Java代码
const WEAK = 0;
const STRONG = 1;
public function rules()
{
return array(
array(‘password’, ‘passwordStrength’, ‘strength’=>self::STRONG),
);
} public function passwordStrength($attribute,$params)//(参数是固定格式)
{
if ($params['strength'] === self::WEAK)
$pattern = ‘/^(?=.*[a-zA-Z0-9]).{5,}$/’;
elseif ($params['strength'] === self::STRONG)
$pattern = ‘/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/’; if(!preg_match($pattern, $this->$attribute))
$this->addError($attribute, ‘your password is not strong enough!’);
}
刚才创建的方法需要两个参数:
* $attribute 需要验证的属性
* $params 在规则中自定义的参数
在模型的 rules 方法中我们验证的是 password 属性,所以在验证规则中需要验证的属性值应该是 password.
在 rules 方法中我们还设置了自定义的参数 strength,它的值将会放到 $params 数组中.
你会发现在方法中我们使用了 CModel::addError().
添加错误接受两个参数:第一个参数是在表单中显示错误的属性名,第二个参数时显示的错误信息 。 2.单独的验证器类
首先要做的是创建类文件.最好的方法时类的文件名和类名相同,可以使用 yii 的延迟加载(lazy loading)功能。
让我们在应用(application)的扩展(extensiions)目录(在 protected 文件夹下)下新建一个文件夹.
将目录命名为: MyValidators然后创建文件: passwordStrength.php
Java代码
class passwordStrength extends CValidator
{ public $strength; private $weak_pattern = ‘/^(?=.*[a-zA-Z0-9]).{5,}$/’;
private $strong_pattern = ‘/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/’;
protected function validateAttribute($object,$attribute)
{
// check the strength parameter used in the validation rule of our model
if ($this->strength == ‘weak’)
$pattern = $this->weak_pattern;
elseif ($this->strength == ‘strong’)
$pattern = $this->strong_pattern; // extract the attribute value from it’s model object
$value=$object->$attribute;
if(!preg_match($pattern, $value))
{
$this->addError($object,$attribute,’your password is too weak!’);
}
}
然后在模型(model)的:
Java代码 public function rules()
{
return array(
array(‘password’, ‘ext.MyValidators.passwordStrength’, ‘strength’=>self::STRONG),
);
} 由于我们直接在User AR类中添加了$repassword属性,并且它与底层数据库表之间没有对应关系,我们需要告诉模型类允许这个属性在setAttributes()被 调用时被设置。 我们的做法是将其添加到User模型类的安全属性列表中。向User::rules()数组添加下列代码:
Java代码
array(‘repassword’, ‘safe’),
我们新建的$repassword不存在对应的tbl_user表中的列,需要将其直接添加到安全属性列表。
setAttributes:
Java代码
$model->attributes=$_POST['User'];
//$model->vpnip =$_POST['User']['vpnip'];
添加了$repassword属性
Java代码
class User extends CActiveRecord
{
public $repassword; //不能是private会报错
以注册验证为例.controller
Java代码
public function actionRegister()
{
$model=new User;
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->validate()){
….
$model->save();
Yii::app()->user->setFlash(‘register’,'Thank you for your register.’);//验证通过提示
$this->redirect(array(‘register’));
}
} $this->render(‘register’,array(
‘model’=>$model,
));
}
register.php
Java代码

YII 表单验证规则的更多相关文章

  1. Yii 表单验证规则---总结

    Filter: 过滤,'filter'=>'trim',表示去空格 Required:必须的,表示不能为空 Match: 匹配正则,需要和pattern一起使用,定义正则表达式,'pattern ...

  2. jquery.validate.js使用之自定义表单验证规则

    jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...

  3. Element表单验证规则

    一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...

  4. CI设置表单验证规则

    CodeIgniter 允许你为单个表单域创建多个验证规则,按顺序层叠在一起, 你也可以同时对表单域的数据进行预处理.要设置验证规则, 可以使用 set_rules() 方法: $this->f ...

  5. iview必备技能一、表单验证规则

    iView表单组件使用async-validator验证器对表单域中数据进行验证,给Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. 完整的验 ...

  6. Yii表单验证

    我之前在朋友的公司拿到他们oa的代码,发现是用Yii写的,oa系统比较简单,但是程序员对Yii的运用比较好,我拿来学习一下.如果有需要,我可以私下分享这个程序,因为是人家的功劳,不在网上公布代码了,只 ...

  7. jquery.validate.js之自定义表单验证规则

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. vue + element 实现登录注册(自定义表单验证规则)

    注册页包含手机验证码登录和密码的二次验证. 效果如下: 实现代码: <template> <div> <div class="register-wrapper& ...

  9. [转]DWZ表单验证规则一览表(留着自己用)

    <form onsubmit="return validateCallback(this)" class="pageForm" action=" ...

随机推荐

  1. jQuery 之 .stop() 方法

    总结version 1.7版本前.stop([clearQueue][,jumpToEnd])clearQueue: 布尔值,默认是 false;此值处理是相关的动画队列是否移除,如果为 false ...

  2. FBX SDK 从2012.1 到 2013.3 变化

    ==================================================== ============================== 译文               ...

  3. Yii render和renderPartial的区别

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 在进行页面输出渲染的时候. 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容 ...

  4. angular.js的post数据方式

    公司的项目前端部分现在改用angular,一切从头学起,今天记录一下关于数据请求的问题,由于get的请求方式比较简单,与post也类似,所以就单独讲讲post方式. 文档上post数据的写法有好几种, ...

  5. Scala的Option类型

    Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用No ...

  6. Swift(二,元组,可选类型,类型转化)

    一,首先,元组是Swift中特有的,OC中没有元组相关类型,具体怎么用,看下面的例子吧 //1.使用元组来定义一组数据 let infoTuple = (,1.8) let nameTuple = i ...

  7. iOS 图片填充 UIImageView

    UIViewContentModeScaleAspectFit,     //这个图片都会在view里面显示,并且比例不变  这就是说 如果图片和view的比例不一样 就会有留白如下图1 UIView ...

  8. Android定时器实现方法[转]

    秒,单位毫秒Message message=new Message();message.what=1;handler.sendMessage(message);//发送消息} catch (Inter ...

  9. 用 OUTLOOK VBA 生成 自定义文件夹 邮件列表

    Option Explicit Sub TestFolder() 'Dim outlookapp, myitem, myfolder 'Dim mailcounts As Integer ' ' 'S ...

  10. designated initializer和secondary initializer是什么?

    仅在此简单记录概念,方便以后回顾... ===================================== designated initializer是指定初始化方法,提供所有参数: sec ...