▪ 前言
https://nai8.me/tool-sc.html
更详细的参见官方手册的 输入验证 和 核心验证器,以下仅整理出常用的方法以供参考
▪ 示例
▪ 默认值
['email', 'default', 'value'=>'lengdo@163.com']
▪ 去除首尾空白字符
['email', 'trim']
['email', 'filter', 'filter'=>'trim']
▪ 使用自定义函数过滤并赋值
['sex', 'filter', 'filter'=>function($value){return (int)$value;}],
['email', 'filter', 'filter'=>function($value){ return trim($value); }]
过滤函数返回的值将替换客户端提交的 email 字段值
▪ 检查字段必须填写
// 没有填写时提示错误
['email', 'required', 'message'=>'{attribute} 不能为空']
▪ 检查字符串长度
// 不符合条件时提示错误
['email', 'string', 'length'=>[3,20], 'message'=>'{attribute} 长度必须在 3~20 之间']
['email', 'string', 'min'=>3, 'max'=>20, 'message'=>'{attribute} 长度必须在 3~20 之间']
▪ 检查格式类型
// 非指定类型时提示错误
['age', 'integer', 'message'=>'{attribute} 必须为整数']
['man', 'boolean', 'message'=>'{attribute} 必须为布尔格式']
['height', 'double', 'message'=>'{attribute} 必须为浮点数']
['weight', 'number', 'message'=>'{attribute} 必须为数字格式']
['birthday', 'date', 'message'=>'{attribute} 必须为日期格式']
['site', 'url', 'defaultScheme'=>'http', 'message'=>'{attribute} 必须为URL格式 ']
['email', 'email', 'message'=>'{attribute} 必须为邮件地址']
检查数组类型
// 必须为数组,并且每项值为字符类型
['privileges', 'each', 'rule'=>['string']],
验证码
['verificationCode', 'captcha']
▪ 检查邮箱是否唯一
// 不唯一时提示错误
['email', 'unique', 'targetClass'=>'common\models\User', 'message'=>'邮箱已经存在']
// 编辑数据时,如果我们没有改变 email 的值,那么使用上面的代码,那么就会出现 '邮箱已经存在' 错误,所以我们必须要过滤掉当前正在编辑的数据行
// 注意:user_id 是 user 数据表的主键,同时我们需要把 user_id 添加到 模型 的 rules 中,这样我们获得客户端提交的 user_id
['email', 'unique', 'targetClass'=>'common\models\User', 'filter'=>function($query){$query->andWhere(['!=','user_id',(int)$this->user_id]);}, 'message'=>'邮箱已经存在']
▪ 检查邮箱是否存在
// 不存在时提示错误
// 默认 email 值将与数据表中的 email 字段进行比较
['email', 'exist', 'targetClass'=>'common\models\User', 'message'=>'指定的邮箱不存在']
// 不存在时提示错误
// 将 email 值和数据表中 username 字段进行比较
['email', 'exist', 'targetClass'=>'common\models\User', 'targetAttribute'=>'username', 'message'=>'指定的邮箱不存在']
// 不存在时提示错误(含条件)
// 将 email 值和数据表中 username 字段进行比较且字段 sex == 'man'
['email', 'exist', 'targetClass'=>'common\models\User', 'filter'=>['sex'=>'man'], 'message'=>'指定的邮箱不存在']
['email', 'exist', 'targetClass'=>'common\models\User', 'filter'=>function($query){$query->andWhere(['=','sex','man']);}, 'message'=>'指定的邮箱不存在']
▪ 检查输入的两个值是否一致
// 不一致时提示错误
['password01', 'required'] // 必须要加上这一句
['password01', 'compare', 'compareAttribute'=>'password02', 'operator'=>'===']
数值范围检查
['level', 'in', 'range'=>[1,2,3]]
['height', 'compare', 'compareValue'=>30, 'operator'=>'>=']
▪ 文件上传
['textFile', 'file', 'extensions'=>'txt,rtf,doc', 'maxSize'=>1024*1024*1024, 'tooBig'=>'文件太大', 'wrongExtension'=>'文件扩展名错误']
▪ 图片上传
['avatar', 'image', 'extensions'=>['png', 'jpg'], 'minWidth' => 100, 'maxWidth' => 1000, 'minHeight'=>100, 'maxHeight'=>1000, ]
使用正则表达式
['mobile', 'match', 'pattern'=>'/^[1][358][0-9]{9}$/'],
['username', 'match', 'pattern'=>'/^[a-z]w*$/i']