核心驗證器(Core Validators)
Yii提供了一系列常用的核心驗證器,主要存在於 yii\validators 命名空間之下。為了避免使用冗長的類名,可以直接用昵稱來指定相應的核心驗證器。 比如可以用 'required' 昵稱代指 yii\validators\RequiredValidator 類,比如:
1 public function rules()
2 {
3 return [
4 [['email', 'password'], 'required'],
5 ];
6 }
yii\validators\Validator::builtInValidators 屬性聲明了所有被支持的驗證器昵稱。
public static $builtInValidators = [
'boolean' => 'yii\validators\BooleanValidator',
'captcha' => 'yii\captcha\CaptchaValidator',
'compare' => 'yii\validators\CompareValidator',
'date' => 'yii\validators\DateValidator',
'default' => 'yii\validators\DefaultValueValidator',
'double' => 'yii\validators\NumberValidator',
'each' => 'yii\validators\EachValidator',
'email' => 'yii\validators\EmailValidator',
'exist' => 'yii\validators\ExistValidator',
'file' => 'yii\validators\FileValidator',
'filter' => 'yii\validators\FilterValidator',
'image' => 'yii\validators\ImageValidator',
'in' => 'yii\validators\RangeValidator',
'integer' => [
'class' => 'yii\validators\NumberValidator',
'integerOnly' => true,
],
'match' => 'yii\validators\RegularExpressionValidator',
'number' => 'yii\validators\NumberValidator',
'required' => 'yii\validators\RequiredValidator',
'safe' => 'yii\validators\SafeValidator',
'string' => 'yii\validators\StringValidator',
'trim' => [
'class' => 'yii\validators\FilterValidator',
'filter' => 'trim',
'skipOnArray' => true,
],
'unique' => 'yii\validators\UniqueValidator',
'url' => 'yii\validators\UrlValidator',
'ip' => 'yii\validators\IpValidator',
];
下面詳細介紹每一款驗證器的主要用法和屬性。
一、yii\validators\BooleanValidator 該驗證器檢查輸入是否為一個布爾值。
1 public function rules()
2 {
3 return [
4 //檢查'data_one'是否為0、1、true、false,當值為0、1的時候無視數據類型
5 ['data_one', 'boolean'],
6
7 //檢查'date_two'是否為布爾類型,即true和false
8 ['data_two', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
9 ];
10 }
trueValue: 代表真的值。默認為 '1'。
falseValue:代表假的值。默認為 '0'。
strict:要求輸入值是否必須嚴格匹配 trueValue 或 falseValue。默認為 false。
注意:因為通過 HTML 表單傳遞的輸入數據都是字符串類型,所以一般情況下都需要保持 strict 屬性為false。
二、yii\captcha\CaptchaValidator 驗證碼驗證器
該驗證器通常配合 yii\captcha\CaptchaAction 以及 yii\captcha\Captcha 使用,以確保輸入的值與 yii\captcha\Captcha 小部件所顯示的驗證碼相同。
1 return [ 2 //captchaAction 指向用於渲染 CAPTCHA 圖片的 yii\captcha\CaptchaAction 的路由。默認是'site/captcha' 3 //caseSensitive 驗證碼比對是否大小寫敏感,默認是 false 4 //skipOnEmpty 當輸入為空時,是否跳過驗證。默認為false,也就是必須輸入 5 ['verifyCode', 'captcha', 'captchaAction' => 'login/captcha', 'caseSensitive'=>false, 'skipOnEmpty' => false], 6 ];
三、yii\validators\CompareValidator 比較兩個特定輸入值之間的關系是否與 operator 屬性所指定的相同。
1 public function rules()
2 {
3 return [
4 //檢查'data_one'的值是否與'data_one_repeat'的值相同
5 //不設置 compareAttribute 屬性,默認與目標屬性加上'_repeat'後綴的的屬性比較
6 ['data_one', 'compare'],
7
8 //設置 compareAttribute 屬性後,比較的對象就是設置的目標屬性
9 ['data_two', 'compare', 'compareAttribute' => 'data_three'],
10
11 //compareValue 設置與 data_one 相比較的常量值
12 //當同時設置 compareValue 和 compareAttribute 時,優先使用 compareValue
13 ['data_four', 'compare', 'compareValue' => 10, 'operator' => '>='],
14 ];
15 }
operator:比較操作符。
==:檢查兩值是否相等。非嚴格模式。
===:檢查兩值是否全等。嚴格模式。
!=:檢查兩值是否不等。非嚴格模式。
!==:檢查兩值是否不全等。嚴格模式。
>:檢查待測目標值是否大於給定被測值。
>=:檢查待測目標值是否大於等於給定被測值。
<:檢查待測目標值是否小於給定被測值。
<=:檢查待測目標值是否小於等於給定被測值。
四、yii\validators\DefaultValueValidator 該驗證器給為空的目標屬性分配默認值,並不進行數據驗證。
1 public function rules()
2 {
3 return [
4 //如果 data_one 的值為空,那麼就設置為 test
5 ['data_one', 'default' , 'value' => 'test'],
6 //如果 data_two 的值為空,通過回調函數設置值 $attribute是目標屬性,這裡為 data_two
7 ['data_two', 'default', 'value' => function($model,$attribute){
8 return 'value';
9 }],
10 ];
11 }
1 //回調函數的基本用法
2 function foo($model, $attribute) {
3 // ... 計算 $value ...
4 return $value;
5 }
五、yii\validators\NumberValidator 檢查輸入值是否為雙精度浮點數
1 public function rules()
2 {
3 return [
4 //驗證器 double 等同於 number
5 //檢查data_one 是否是一個數字
6 ['data_one', 'double'],
7 //max 設置上限值 min 設置下限值,都包含界點。不設置則不檢查上下限值
8 ['data_two', 'number', 'max' => 10, 'min' => 5],
9 ];
10 }
六、yii\validators\EachValidator 驗證數組裡的每個元素是否符合某種規則
1 public function rules()
2 {
3 return [
4 //驗證數組 data_one 裡的元素都是數值
5 ['data_one', 'each', 'rule' => ['integer']],
6
7 //驗證數組 data_two 裡的元素都是布爾值
8 ['data_two', 'each', 'rule' => ['boolean'],'allowMessageFromRule'=> false,'message'=> '必須都是布爾值'],
9 ];
10 }
需要驗證的值必須是一個數組。
rule: 通過一個數組指定一個驗證規則。數組的第一個元素是驗證器的類名或者別名,剩余的元素以鍵值對的方式來設置驗證器的屬性配置。
allowMessageFromRule: 是否使用引用驗證器裡返回的錯誤信息,默認為true。如果設置為false,那麼就必須要設置 message 屬性。
注意:如果需要驗證的值不是一個數組,那麼就會認為是驗證失敗,那麼設置的 message 就會返回作為錯誤信息。
七、yii\validators\EmailValidator 檢測輸入的值是否為有效的郵箱地址
1 public function rules()
2 {
3 return [
4 //驗證email 是否為有效的郵箱地址
5 ['email', 'email'],
6 ];
7 }
allowName:檢查是否允許帶名稱的電子郵件地址 (e.g. 張三 <John.san@example.com>)。 默認為 false。
checkDNS:檢查郵箱域名是否存在,且有沒有對應的 A 或 MX 記錄。有的時候該項檢查可能會因為臨時性 DNS 故障而失敗,哪怕它其實是有效的。 默認為 false。
enableIDN:驗證過程是否應該考慮 IDN(internationalized domain names,國際化域名, 也稱多語種域名,比如中文域名)。默認為 false。使用 IDN 驗證功能,請先確保安裝並開啟 intl PHP 擴展,不然會導致拋出異常。