yii2 驗證規(guī)則集合-核心驗證器

https://www.yiiframework.com/doc/guide/2.0/zh-cn/tutorial-core-validators

Yii 提供一系列常用的核心驗證器怪蔑,位于 yii\validators 命名空間之下昭齐。 為了避免使用冗長的類名,你可以直接用別名來指定相應(yīng)的核心驗證器。 比如你可以用 required 別名代指 yii\validators\RequiredValidator 類:

public function rules()
{
    return [
        [['email', 'password'], 'required'],
    ];
}

[yii\validators\Validator::builtInValidators](https://www.yiiframework.com/doc/api/2.0/yii-validators-validator#builtInValidators-detail) 屬性聲明了所有被支持的驗證器別名渴逻。

下面,我們將詳細介紹每一款驗證器的主要用法和屬性。

boolean(布爾型)

[
    // 檢查 "selected" 是否為 0 或 1,無視數(shù)據(jù)類型
    ['selected', 'boolean'],

    // 檢查 "deleted" 是否為布爾類型们衙,即 true 或 false
    ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]

該驗證器檢查輸入值是否為一個布爾值。

  • trueValue: 代表的值碱呼。默認為 '1'蒙挑。
  • falseValue:代表的值。默認為 '0'巍举。
  • strict:是否要求待測輸入必須嚴格匹配 trueValuefalseValue脆荷。默認為 false

**注意: **因為通過 HTML 表單傳遞的輸入數(shù)據(jù)都是字符串類型懊悯,所以一般情況下你都需要保持 strict 屬性為假。

captcha(驗證碼)

[
    ['verificationCode', 'captcha'],
]

該驗證器通常配合 yii\captcha\CaptchaAction 以及 yii\captcha\Captcha 使用梦皮,以確保某一輸入與 CAPTCHA 小部件所顯示的驗證代碼(verification code)相同炭分。

  • caseSensitive:對驗證碼的比對是否要求大小寫敏感。默認為 false剑肯。
  • captchaAction:指向用于渲染 CAPTCHA 圖片的 CAPTCHA action路由捧毛。默認為 'site/captcha'
  • skipOnEmpty:當輸入為空時,是否跳過驗證呀忧。 默認為 false师痕,也就是輸入值為必需項。

compare(比對)

[
    // 檢查 "password" 屬性的值是否與 "password_repeat" 的值相同
    ['password', 'compare'],

    // 和上一個相同而账,只是明確指定了需要對比的屬性字段
    ['password', 'compare', 'compareAttribute' => 'password_repeat'],

    // 檢查年齡是否大于等于 30
    ['age', 'compare', 'compareValue' => 30, 'operator' => '>='],
]

該驗證器比對兩個特定輸入值之間的關(guān)系 是否與 operator 屬性所指定的相同胰坟。

  • compareAttribute:用于與原屬性相比對的屬性名稱。 當該驗證器被用于驗證某目標屬性時泞辐, 該屬性會默認為目標屬性加后綴 _repeat笔横。 舉例來說,若目標屬性為 password咐吼,則該屬性默認為 password_repeat吹缔。
  • compareValue:用于與輸入值相比對的常量值。 當該屬性與 compareAttribute 屬性同時被指定時锯茄,該屬性優(yōu)先被使用厢塘。
  • operator:比對操作符。默認為 ==肌幽,意味著檢查輸入值是否與 compareAttributecompareValue 的值相等俗冻。 該屬性支持如下操作符:
    • ==:檢查兩值是否相等。比對為非嚴格模式牍颈。
    • ===:檢查兩值是否全等迄薄。比對為嚴格模式。
    • !=:檢查兩值是否不等煮岁。比對為非嚴格模式讥蔽。
    • !==:檢查兩值是否不全等。比對為嚴格模式画机。
    • >:檢查待測目標值是否大于給定被測值冶伞。
    • >=:檢查待測目標值是否大于等于給定被測值。
    • <:檢查待測目標值是否小于給定被測值步氏。
    • <=:檢查待測目標值是否小于等于給定被測值响禽。
  • type: 默認的比對類型是'string',此時將按照字節(jié)逐個對比荚醒。 當需要比對的值是數(shù)字時芋类,需要設(shè)置類型[type](https://www.yiiframework.com/doc/api/2.0/yii-validators-comparevalidator#type-detail)為 'number',啟用數(shù)字對比模式界阁。

比對日期值

比對驗證器只能用來對比字符串和數(shù)字侯繁。如果你需要比對日期,有兩種方式泡躯。 如果需要比對一個固定的日期值贮竟,只需要使用 date驗證器并設(shè)置對應(yīng)的屬性 [min](https://www.yiiframework.com/doc/api/2.0/yii-validators-datevalidator#min-detail) 或 [max](https://www.yiiframework.com/doc/api/2.0/yii-validators-datevalidator#max-detail) 丽焊。 如果需要比對如表單提交的兩個日期,比如一個fromDate和一個toDate項咕别, 你可以結(jié)合比對驗證器和日期驗證器同時使用技健,如下所示:

['fromDate', 'date', 'timestampAttribute' => 'fromDate'],
['toDate', 'date', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],

因為驗證器會按照順序執(zhí)行, 將首先驗證 fromDatetoDate 字段是一個有效的日期值惰拱,最終將被轉(zhuǎn)換成一個系統(tǒng)可識別的格式雌贱。 此后這兩個值將使用比對驗證器進行比對。 因日期驗證器只提供服務(wù)端使用弓颈,當前不提供客戶端驗證帽芽, 故 [enableClientValidation](https://www.yiiframework.com/doc/api/2.0/yii-validators-validator#enableClientValidation-detail) 在比對驗證器將同樣被設(shè)置為 false

date(日期)

此日期 date 驗證器有三種不同的使用方式:

[
    [['from_date', 'to_date'], 'date'],
    [['from_datetime', 'to_datetime'], 'datetime'],
    [['some_time'], 'time'],
]

該驗證器檢查輸入值是否為適當格式的 date翔冀,time导街,或者 datetime。 另外纤子,它還可以幫你把輸入值轉(zhuǎn)換為一個 UNIX 時間戳并保存到 timestampAttribute 所指定的屬性里搬瑰。

  • format:被驗證值的日期/時間格式。 這里的值可以是 ICU manual 中定義的日期時間格式控硼。 另外還可以設(shè)置以 php: 開頭的字符串泽论,用來表示PHP可以識別的日期時間格式。 Datetime 日期時間類卡乾。請參考 https://secure.php.net/manual/en/datetime.createfromformat.php 獲取更多支持的格式翼悴。 如果沒有設(shè)置,默認值將使用 Yii::$app->formatter->dateFormat 中的值幔妨。 請參考 API 文檔 以獲取更詳細的說明鹦赎。

  • timestampAttribute:輸入的日期時間將被轉(zhuǎn)換為時間戳后設(shè)置到的屬性的名稱。 可以設(shè)置為和被驗證的屬性相同误堡。如果相同古话, 原始值將在驗證結(jié)束后被時間戳覆蓋。 請參考 "Handling date input with the DatePicker" 以獲取更多使用事例锁施。

    從版本 2.0.4 開始陪踩,支持 使用 [timestampAttributeFormat](https://www.yiiframework.com/doc/api/2.0/yii-validators-datevalidator#timestampAttributeFormat-detail) 設(shè)置日期時間格式 和使用 [timestampAttributeTimeZone](https://www.yiiframework.com/doc/api/2.0/yii-validators-datevalidator#timestampAttributeTimeZone-detail) 設(shè)置時區(qū)。

    注意悉抵,如果使用 timestampAttribute肩狂,被驗證的值將被轉(zhuǎn)換為UTC標準的時間戳, 所以使用 input time zone 輸入的時區(qū)將被轉(zhuǎn)換為UTC時間基跑。

  • 自版本 2.0.4 開始支持 直接對 minimummaximum 設(shè)置時間戳婚温。

如果輸入的值是可選的,可以設(shè)置一個 默認值驗證器 來確毕狈瘢空值通過驗證器驗證后的值是 null栅螟, 否則數(shù)據(jù)庫可能會保存類似 0000-00-00 的值, 或表單日期選擇器會顯示 1970-01-01 篱竭。

[
    [['from_date', 'to_date'], 'default', 'value' => null],
    [['from_date', 'to_date'], 'date'],
],

default(默認值)

[
    // 若 "age" 為空力图,則將其設(shè)為 null
    ['age', 'default', 'value' => null],

    // 若 "country" 為空,則將其設(shè)為 "USA"
    ['country', 'default', 'value' => 'USA'],

    // 若 "from" 和 "to" 為空掺逼,則分別給他們分配自今天起吃媒,3 天后和 6 天后的日期。
    [['from', 'to'], 'default', 'value' => function ($model, $attribute) {
        return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' :'+6 days'));
    }],
]

該驗證器并不進行數(shù)據(jù)驗證吕喘。 而是赘那,給為空的待測屬性分配默認值。

  • value:默認值氯质,或一個返回默認值的 PHP Callable 對象(即回調(diào)函數(shù))募舟。 它們會分配給檢測為空的待測屬性。PHP 回調(diào)方法的樣式如下:
function foo($model, $attribute) {
    // ... 計算 $value ...
    return $value;
}

**信息: **如何判斷待測值是否為空闻察, 被寫在另外一個話題的 處理空輸入章節(jié)。

double(雙精度浮點型)

[
    // 檢查 "salary" 是否為浮點數(shù)
    ['salary', 'double'],
]

該驗證器檢查輸入值是否為雙精度浮點數(shù)辕漂。等效于 number 驗證器。

  • max:上限值(含界點)钉嘹。若不設(shè)置,則驗證器不檢查上限跋涣。
  • min:下限值(含界點)。若不設(shè)置宏蛉,則驗證器不檢查下限。

each(循環(huán)驗證)

**信息: **此驗證器自版本 2.0.4 后可用性置。

[
    // 檢查是否每個分類編號都是一個整數(shù)
    ['categoryIDs', 'each', 'rule' => ['integer']],
]

此驗證器只能驗證數(shù)組格式的屬性拾并。此驗證器將判斷數(shù)組中的 每個 元素是否都符合驗證規(guī)則。 在上面的例子中鹏浅,categoryIDs 屬性必須是一個數(shù)組 且每個元素將被使用 integer 驗證器進行驗證嗅义。

  • rule:保存驗證規(guī)則的數(shù)組。數(shù)組中第一個元素表示驗證器類名或 驗證器的別名隐砸。數(shù)組中其余鍵值對將被用來配置此驗證器規(guī)則之碗。
  • allowMessageFromRule:是否使用規(guī)則中指定的驗證器返回的錯誤信息。默認值為 true季希。 如果設(shè)置為 false褪那,將使用 message 作為錯誤信息幽纷。

**注意: **如果被驗證的值不是一個數(shù)組,將被認為驗證失敗博敬, 并且返回 message 設(shè)定的錯誤信息友浸。

email(電子郵件)

[
    // 檢查 "email" 是否為有效的郵箱地址
    ['email', 'email'],
]

該驗證器檢查輸入值是否為有效的郵箱地址。

  • allowName:檢查是否允許帶名稱的電子郵件地址 (e.g. 張三 <John.san@example.com>)偏窝。 默認為 false收恢。
  • checkDNS:檢查郵箱域名是否存在,且有沒有對應(yīng)的 A 或 MX 記錄祭往。 不過要知道伦意,有的時候該項檢查可能會因為臨時性 DNS 故障而失敗, 哪怕它其實是有效的硼补。默認為 false驮肉。
  • enableIDN:驗證過程是否應(yīng)該考慮 IDN(internationalized domain names,國際化域名括勺,也稱多語種域名缆八,比如中文域名)奈辰。 默認為 false奖恰。要注意但是為使用 IDN 驗證功能瑟啃, 請先確保安裝并開啟 intl PHP 擴展蛹屿,不然會導(dǎo)致拋出異常错负。

exist(存在性)

[
    // a1 需要在 "a1" 屬性所代表的字段內(nèi)存在
    ['a1', 'exist'],

    // a1 必需存在犹撒,但檢驗的是 a1 的值在字段 a2 中的存在性
    ['a1', 'exist', 'targetAttribute' => 'a2'],

    // a1 和 a2 的值都需要存在粒褒,且它們都能收到錯誤提示
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],

    // a1 和 a2 的值都需要存在奕坟,只有 a1 能接收到錯誤信息
    ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],

    // 通過同時在 a2 和 a3 字段中檢查 a2 和 a1 的值來確定 a1 的存在性
    ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],

    // a1 必需存在,若 a1 為數(shù)組函筋,則其每個子元素都必須存在奠伪。
    ['a1', 'exist', 'allowArray' => true],

    // type_id 需要存在于 ProductType 類中定義的表中的“id”列中
    ['type_id', 'exist', 'targetClass' => ProductType::class, 'targetAttribute' => ['type_id' => 'id']],    

    // 與前一個相同首懈,但使用已定義的關(guān)聯(lián)“type”
    ['type_id', 'exist', 'targetRelation' => 'type'],
]

該驗證器檢查輸入值是否在某表字段中存在究履。 它只對活動記錄 類型的模型類屬性起作用, 能支持對一個或多過字段的驗證泥彤。

可以使用此驗證器驗證單個數(shù)據(jù)列或多個數(shù)據(jù)列 (如多個列不同的組合是否存在)吟吝。

  • targetClass:用于查找輸入值的目標 AR 類剑逃。 若不設(shè)置蛹磺,則會使用正在進行驗證的當前模型類。
  • targetAttribute:用于檢查輸入值存在性的 targetClass 的模型屬性裙品。 若不設(shè)置清酥,它會直接使用待測屬性名(整個參數(shù)數(shù)組的首元素)焰轻。 除了指定為字符串以外辱志,你也可以用數(shù)組的形式揩懒,同時指定多個用于驗證的表字段, 數(shù)組的鍵和值都是代表字段的屬性名臣镣,值表示 targetClass 的待測數(shù)據(jù)源字段忆某,而鍵表示當前模型的待測屬性名弃舒。 若鍵和值相同聋呢,你可以只指定值削锰。(如:['a2'] 就代表 ['a2'=>'a2']
  • targetRelation: since version 2.0.14 you can use convenient attribute targetRelation, which overrides the targetClass and targetAttribute attributes using specs from the requested relation.
  • filter:用于檢查輸入值存在性必然會進行數(shù)據(jù)庫查詢喂窟,而該屬性為用于進一步篩選該查詢的過濾條件。 可以為代表額外查詢條件的字符串或數(shù)組(關(guān)于查詢條件的格式质和,請參考 yii\db\Query::where())厦酬; 或者樣式為 function ($query) 的匿名函數(shù)仗阅, $query 參數(shù)為你希望在該函數(shù)內(nèi)進行修改的 Query 對象国夜。
  • allowArray:是否允許輸入值為數(shù)組。默認為 false醋闭。 若該屬性為 true 且輸入值為數(shù)組证逻,則數(shù)組的每個元素都必須在目標字段中存在囚企。 值得注意的是豪治,若用吧 targetAttribute 設(shè)為多元素數(shù)組來驗證被測值在多字段中的存在性時,該屬性不能設(shè)置為 true歹河。

file(文件)

[
    // 檢查 "primaryImage" 是否為 PNG, JPG 或 GIF 格式的上傳圖片厨姚。
    // 文件大小必須小于  1MB
    ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024],
]

該驗證器檢查輸入值是否為一個有效的上傳文件谬墙。

  • extensions:可接受上傳的文件擴展名列表拭抬。它可以是數(shù)組侵蒙, 也可以是用空格或逗號分隔各個擴展名的字符串 (如 "gif, jpg")纷闺。 擴展名大小寫不敏感犁功。默認為 null, 意味著所有擴展名都被接受署鸡。
  • mimeTypes:可接受上傳的 MIME 類型列表侍筛。 它可以是數(shù)組撒穷,也可以是用空格或逗號分隔各個 MIME 的字符串 (如 "image/jpeg, image/png")禽笑。 Mime 類型名是大小寫不敏感的佳镜。默認為 null, 意味著所有 MIME 類型都被接受啊掏。 請參考 common media types 獲取更多詳細內(nèi)容迟蜜。
  • minSize:上傳文件所需最少多少 Byte 的大小娜睛。默認為 null畦戒,代表沒有下限。
  • maxSize:上傳文件所需最多多少 Byte 的大小笼痹。默認為 null凳干,代表沒有上限救赐。
  • maxFiles:給定屬性最多能承載多少個文件。 默認為 1钮追,代表只允許單文件上傳元媚。 若值大于一,那么輸入值必須為包含最多 maxFiles 個上傳文件元素的數(shù)組甥角。
  • checkExtensionByMimeType:是否通過文件的 MIME 類型來判斷其文件擴展。 若由 MIME 判定的文件擴展與給定文件的擴展不一樣翁巍,則文件會被認為無效休雌。 默認為 true,代表執(zhí)行上述檢測肝断。

FileValidator 通常與 yii\web\UploadedFile 共同使用杈曲。 請參考 文件上傳章節(jié)來了解有關(guān)文件上傳與上傳文件的檢驗的全部內(nèi)容。

filter(過濾器)

[
    // trim 掉 "username" 和 "email" 輸入
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],

    // 標準化 "phone" 輸入
    ['phone', 'filter', 'filter' => function ($value) {
        // 在此處標準化輸入的電話號碼
        return $value;
    }],

    // 標準化 "phone" 使用方法 "normalizePhone"
    ['phone', 'filter', 'filter' => [$this, 'normalizePhone']],

    public function normalizePhone($value) {
        return $value;
    }
]

該驗證器并不進行數(shù)據(jù)驗證胸懈。而是給輸入值應(yīng)用一個過濾器担扑, 并在驗證后把它賦值回原屬性變量。

  • filter:用于定義過濾器的 PHP 回調(diào)函數(shù)趣钱。可以為全局函數(shù)名卜壕,匿名函數(shù)侦锯,或其他葱蝗。 該函數(shù)的樣式必須是 function ($value) { return $newValue; }悼凑。該屬性不能省略渔欢,必須設(shè)置垫挨。
  • skipOnArray:是否在輸入值為數(shù)組時跳過過濾器。默認為 false。 請注意如果過濾器不能處理數(shù)組輸入且预,你就應(yīng)該把該屬性設(shè)為 true涮拗。 否則可能會導(dǎo)致 PHP Error 的發(fā)生。

**提示: **如果你只是想要用 trim 處理下輸入值首妖,你可以直接用 trim 驗證器的菊碟。

**提示: **有許多的PHP方法結(jié)構(gòu)和 filter 需要的結(jié)構(gòu)一致坛芽。 比如使用類型轉(zhuǎn)換方法 (intval丐膝, boolval, ...) 來確保屬性為指定的類型煞烫, 你可以簡單的設(shè)置這些方法名而不是重新定義一個匿名函數(shù):

['property', 'filter', 'filter' => 'boolval'],
['property', 'filter', 'filter' => 'intval'],

image(圖片)

[
    // 檢查 "primaryImage" 是否為適當尺寸的有效圖片
    ['primaryImage', 'image', 'extensions' => 'png, jpg',
        'minWidth' => 100, 'maxWidth' => 1000,
        'minHeight' => 100, 'maxHeight' => 1000,
    ],
]

該驗證器檢查輸入值是否為代表有效的圖片文件最冰。它繼承自 file 驗證器, 并因此繼承有其全部屬性达布。除此之外, 它還支持以下為圖片檢驗而設(shè)的額外屬性:

  • minWidth:圖片的最小寬度牛隅。默認為 null,代表無下限际插。
  • maxWidth:圖片的最大寬度。默認為 null隙弛,代表無上限总珠。
  • minHeight:圖片的最小高度。 默認為 null搏讶,代表無下限。
  • maxHeight:圖片的最大高度。默認為 null,代表無上限椿胯。

ip(IP地址)

[
    // 檢查 "ip_address" 是否為一個有效的 IPv4 或 IPv6 地址
    ['ip_address', 'ip'],

    // 檢查 "ip_address" 是否為一個有效的 IPv6 地址或子網(wǎng)地址筷登,
    // 被檢查的值將被展開成為一個完整的 IPv6 表示方法。
    ['ip_address', 'ip', 'ipv4' => false, 'subnet' => null, 'expandIPv6' => true],

    // 檢查 "ip_address" 是否為一個有效的 IPv4 或 IPv6 地址哩盲,
    // 允許地址存在一個表示非的字符 `!`
    ['ip_address', 'ip', 'negation' => true],
]

此驗證器檢查屬性的值是否是一個有效的 IPv4/IPv6 地址或子網(wǎng)地址前方。 如果標準記法或 IPv6 擴展記法被啟用,原始值將被改變廉油。

此驗證器有以下參數(shù):

  • ipv4: 是否啟用 IPv4 地址檢測惠险。默認為 true 。

  • ipv6: 是否啟用 IPv6 地址檢測抒线。默認為 true班巩。

  • subnet: 是否啟用 CIDR 子網(wǎng)檢測,類似 192.168.10.0/24

    • true - 子網(wǎng)是必須的嘶炭,如果不是標準 CIDR 格式將被拒絕
    • false - 地址不能有 CIDR
    • null - CIDR 是可選的

    默認值為 false抱慌。

  • normalize: 是否在地址沒有 CIDR 時添加 CIDR 最小值作為后綴 (IPv4 為 32逊桦、IPv6 為 128) 僅當 subnet 不為 false時使用。例如:

    • 10.0.1.5 將被轉(zhuǎn)換為標準的10.0.1.5/32
    • 2008:db0::1 將被轉(zhuǎn)換為標準的 2008:db0::1/128

    默認為 false抑进。

  • negation: 是否允許被檢測地址在首位存在代表非的字符 ! 强经。默認為 false。

  • expandIPv6: 是否將簡化的 IPv6 地址擴展為標準記法格式寺渗。 例如匿情, 2008:db0::1 將被擴展成 2008:0db0:0000:0000:0000:0000:0000:0001。默認為 false户秤。

  • ranges: 允許或禁止的 IPv4 或 IPv6 范圍的數(shù)組码秉。

    當此數(shù)組為空或此參數(shù)沒有設(shè)置時,所有IP地址都被允許鸡号。 否則转砖,將逐個對比此規(guī)則,當找到第一條適用時停止鲸伴。 如果沒有任何規(guī)則適用待驗證的IP地址府蔗,IP地址將被禁止。

    例如: ```php [

       'client_ip', 'ip', 'ranges' => [
           '192.168.10.128'
           '!192.168.10.0/24',
           'any' // 允許任何其它IP地址
       ]
    
    

    ] ``` 在這個例子中汞窗,除了 192.168.10.0/24 子網(wǎng)之外的所有 IPv4 和 IPv6 地址都被允許姓赤。 IPv4 地址 192.168.10.128 同樣時允許的,因為這條規(guī)則在約束規(guī)則之前適用仲吏。

  • networks: 網(wǎng)絡(luò)別名數(shù)組不铆, 可以用在 ranges 中。數(shù)組格式:

    • key - 別名
    • value - 一組字符串裹唆。每個子字符串可以是一個范圍誓斥,IP地址或另一個別名。子字符串也可以 設(shè)置一個表示非的字符 ! (和 negation 不相關(guān))许帐。

    下列別名為默認定義:

    • *: any
    • any: 0.0.0.0/0, ::/0
    • private: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fd00::/8
    • multicast: 224.0.0.0/4, ff00::/8
    • linklocal: 169.254.0.0/16, fe80::/10
    • localhost: 127.0.0.0/8', ::1
    • documentation: 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32
    • system: multicast, linklocal, localhost, documentation

**信息: **此驗證器自版本 2.0.7 后可用劳坑。

in(范圍)

[
    // 檢查 "level" 是否為 1、2 或 3 中的一個
    ['level', 'in', 'range' => [1, 2, 3]],
]

該驗證器檢查輸入值是否存在于給定列表的范圍之中成畦。

  • range:用于檢查輸入值的給定值列表距芬。
  • strict:輸入值與給定值直接的比較是否為嚴格模式(也就是類型與值都要相同,即全等)循帐。 默認為 false框仔。
  • not:是否對驗證的結(jié)果取反。默認為 false拄养。當該屬性被設(shè)置為 true存和, 驗證器檢查輸入值是否不在給定列表內(nèi)。
  • allowArray:是否接受輸入值為數(shù)組。當該值為 true 且輸入值為數(shù)組時捐腿, 數(shù)組內(nèi)的每一個元素都必須在給定列表內(nèi)存在,否則返回驗證失敗柿顶。

integer(整數(shù))

[
    // 檢查 "age" 是否為整數(shù)
    ['age', 'integer'],
]

該驗證器檢查輸入值是否為整形茄袖。

  • max:上限值(含界點)。若不設(shè)置嘁锯,則驗證器不檢查上限宪祥。
  • min:下限值(含界點)。若不設(shè)置家乘,則驗證器不檢查下限蝗羊。

match(正則表達式)

[
    // 檢查 "username" 是否由字母開頭,且只包含單詞字符
    ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]

該驗證器檢查輸入值是否匹配指定正則表達式仁锯。

  • pattern:用于檢測輸入值的正則表達式耀找。該屬性是必須的, 若不設(shè)置則會拋出異常业崖。
  • not:是否對驗證的結(jié)果取反野芒。默認為 false, 代表輸入值匹配正則表達式時驗證成功双炕。如果設(shè)為 true狞悲, 則輸入值不匹配正則時返回匹配成功。

number(數(shù)字)

[
    // 檢查 "salary" 是否為數(shù)字
    ['salary', 'number'],
]

該驗證器檢查輸入值是否為數(shù)字妇斤。他等效于 double 驗證器摇锋。

  • max:上限值(含界點)。若不設(shè)置站超,則驗證器不檢查上限荸恕。
  • min:下限值(含界點)。若不設(shè)置顷编,則驗證器不檢查下限戚炫。

required(必填)

[
    // 檢查 "username" 與 "password" 是否為空
    [['username', 'password'], 'required'],
]

該驗證器檢查輸入值是否為空,還是已經(jīng)提供了媳纬。

  • requiredValue:所期望的輸入值双肤。若沒設(shè)置,意味著輸入不能為空钮惠。
  • strict:檢查輸入值時是否檢查類型茅糜。默認為 false。 當沒有設(shè)置 requiredValue 屬性時素挽,若該屬性為 true蔑赘, 驗證器會檢查輸入值是否嚴格為 null;若該屬性設(shè)為 false, 該驗證器會用一個更加寬松的規(guī)則檢驗輸入值是否為空缩赛。 當設(shè)置了 requiredValue 屬性時耙箍,若該屬性為 true,輸入值與 requiredValue 的比對會同時檢查數(shù)據(jù)類型酥馍。

**注意: **如何判斷待測值是否為空辩昆,被寫在另外一個話題的 處理空輸入章節(jié)。

safe(安全)

[
    // 標記 "description" 為安全屬性
    ['description', 'safe'],
]

該驗證器并不進行數(shù)據(jù)驗證旨袒。而是把一個屬性標記為 安全屬性汁针。

string(字符串)

[
    // 檢查 "username" 是否為長度 4 到 24 之間的字符串
    ['username', 'string', 'length' => [4, 24]],
]

該驗證器檢查輸入值是否為特定長度的字符串。并檢查屬性的值是否為某個特定長度砚尽。

  • length:指定待測輸入字符串的長度限制施无。 該屬性可以被指定為以下格式之一:
    • 證書:the exact length that the string should be of;
    • 單元素數(shù)組:代表輸入字符串的最小長度 (e.g. [8])。這會重寫 min 屬性必孤。
    • 包含兩個元素的數(shù)組:代表輸入字符串的最小和最大長度(e.g. [8, 128])猾骡。 這會同時重寫 minmax 屬性。
  • min:輸入字符串的最小長度隧魄。若不設(shè)置卓练,則代表不設(shè)下限。
  • max:輸入字符串的最大長度购啄。若不設(shè)置襟企,則代表不設(shè)上限。
  • encoding:待測字符串的編碼方式狮含。若不設(shè)置顽悼,則使用應(yīng)用自身的 charset 屬性值, 該值默認為 UTF-8几迄。

trim(譯為修剪/裁邊)

[
    // trim 掉 "username" 和 "email" 兩側(cè)的多余空格
    [['username', 'email'], 'trim'],
]

該驗證器并不進行數(shù)據(jù)驗證蔚龙。而是,trim 掉輸入值兩側(cè)的多余空格映胁。 注意若該輸入值為數(shù)組木羹,那它會忽略掉該驗證器。

unique(唯一性)

[
    // a1 需要在 "a1" 屬性所代表的字段內(nèi)唯一
    ['a1', 'unique'],

    // a1 需要唯一解孙,但檢驗的是 a1 的值在字段 a2 中的唯一性
    ['a1', 'unique', 'targetAttribute' => 'a2'],

    // a1 和 a2 的組合需要唯一坑填,且它們都能收到錯誤提示
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],

    // a1 和 a2 的組合需要唯一,只有 a1 能接收錯誤提示
    ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],

    // 通過同時在 a2 和 a3 字段中檢查 a2 和 a3 的值來確定 a1 的唯一性
    ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
]

該驗證器檢查輸入值是否在某表字段中唯一弛姜。 它只對活動記錄類型的模型類屬性起作用脐瑰, 能支持對一個或多過字段的驗證。

  • targetClass:用于查找輸入值的目標 AR 類廷臼。 若不設(shè)置苍在,則會使用正在進行驗證的當前模型類绝页。
  • targetAttribute:用于檢查輸入值唯一性的 targetClass 的模型屬性。 若不設(shè)置寂恬,它會直接使用待測屬性名(整個參數(shù)數(shù)組的首元素)续誉。 除了指定為字符串以外,你也可以用數(shù)組的形式初肉,同時指定多個用于驗證的表字段屈芜,數(shù)組的鍵和值都是代表字段的屬性名, 值表示 targetClass 的待測數(shù)據(jù)源字段朴译,而鍵表示當前模型的待測屬性名。 若鍵和值相同属铁,你可以只指定值眠寿。(如:['a2'] 就代表 ['a2'=>'a2']
  • filter:用于檢查輸入值唯一性必然會進行數(shù)據(jù)庫查詢, 而該屬性為用于進一步篩選該查詢的過濾條件焦蘑《⒐埃可以為代表額外查詢條件的字符串或數(shù)組 (關(guān)于查詢條件的格式,請參考 yii\db\Query::where())例嘱;或者樣式為 function ($query) 的匿名函數(shù)狡逢, $query 參數(shù)為你希望在該函數(shù)內(nèi)進行修改的 Query 對象。

url(網(wǎng)址)

[
    // 檢查 "website" 是否為有效的 URL拼卵。若沒有 URI 方案奢浑,
    // 則給 "website" 屬性加 "http://" 前綴
    ['website', 'url', 'defaultScheme' => 'http'],
]

該驗證器檢查輸入值是否為有效 URL。

  • validSchemes:用于指定那些 URI 方案會被視為有效的數(shù)組腋腮。默認為 ['http', 'https']雀彼, 代表 httphttps URLs 會被認為有效。
  • defaultScheme:若輸入值沒有對應(yīng)的方案前綴即寡,會使用的默認 URI 方案前綴徊哑。 默認為 null,代表不修改輸入值本身聪富。
  • enableIDN:驗證過程是否應(yīng)該考慮 IDN(internationalized domain names莺丑,國際化域名,也稱多語種域名墩蔓,比如中文域名)梢莽。 默認為 false。要注意但是為使用 IDN 驗證功能钢拧, 請先確保安裝并開啟 intl PHP 擴展蟹漓,不然會導(dǎo)致拋出異常。

**注意: **驗證器檢查 URL 結(jié)構(gòu)和主機部分是否正確源内。 它不會檢查URL的其余部分葡粒,也不是為防止XSS或任何其他攻擊而設(shè)計的份殿。請參閱 安全最佳實踐 有關(guān)開發(fā)應(yīng)用程序時威脅防范的更多信息的文章。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗽交,一起剝皮案震驚了整個濱河市卿嘲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夫壁,老刑警劉巖拾枣,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盒让,居然都是意外死亡梅肤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門邑茄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姨蝴,“玉大人,你說我怎么就攤上這事肺缕∽笠剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵同木,是天一觀的道長浮梢。 經(jīng)常有香客問我,道長彤路,這世上最難降的妖魔是什么秕硝? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮斩萌,結(jié)果婚禮上缝裤,老公的妹妹穿的比我還像新娘。我一直安慰自己颊郎,他們只是感情好憋飞,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姆吭,像睡著了一般榛做。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上内狸,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天检眯,我揣著相機與錄音,去河邊找鬼昆淡。 笑死锰瘸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的昂灵。 我是一名探鬼主播避凝,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舞萄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了管削?” 一聲冷哼從身側(cè)響起倒脓,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎含思,沒想到半個月后崎弃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡含潘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年饲做,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遏弱。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艇炎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腾窝,到底是詐尸還是另有隱情,我是刑警寧澤居砖,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布虹脯,位于F島的核電站,受9級特大地震影響奏候,放射性物質(zhì)發(fā)生泄漏循集。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一蔗草、第九天 我趴在偏房一處隱蔽的房頂上張望咒彤。 院中可真熱鬧,春花似錦咒精、人聲如沸镶柱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歇拆。三九已至,卻和暖如春范咨,著一層夾襖步出監(jiān)牢的瞬間故觅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工渠啊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留输吏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓替蛉,卻偏偏與公主長得像贯溅,于是被迫代替她去往敵國和親拄氯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354