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-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
:是否要求待測輸入必須嚴格匹配trueValue
或falseValue
脆荷。默認為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
:比對操作符。默認為==
肌幽,意味著檢查輸入值是否與compareAttribute
或compareValue
的值相等俗冻。 該屬性支持如下操作符:-
==
:檢查兩值是否相等。比對為非嚴格模式牍颈。 -
===
:檢查兩值是否全等迄薄。比對為嚴格模式。 -
!=
:檢查兩值是否不等煮岁。比對為非嚴格模式讥蔽。 -
!==
:檢查兩值是否不全等。比對為嚴格模式画机。 -
>
:檢查待測目標值是否大于給定被測值冶伞。 -
>=
:檢查待測目標值是否大于等于給定被測值。 -
<
:檢查待測目標值是否小于給定被測值步氏。 -
<=
:檢查待測目標值是否小于等于給定被測值响禽。
-
-
type
: 默認的比對類型是'string',此時將按照字節(jié)逐個對比荚醒。 當需要比對的值是數(shù)字時芋类,需要設(shè)置類型[type-detail)為 'number',啟用數(shù)字對比模式界阁。
比對日期值
比對驗證器只能用來對比字符串和數(shù)字侯繁。如果你需要比對日期,有兩種方式泡躯。 如果需要比對一個固定的日期值贮竟,只需要使用 date驗證器并設(shè)置對應(yīng)的屬性 [min-detail) 或 [max-detail) 丽焊。 如果需要比對如表單提交的兩個日期,比如一個fromDate
和一個toDate
項咕别, 你可以結(jié)合比對驗證器和日期驗證器同時使用技健,如下所示:
['fromDate', 'date', 'timestampAttribute' => 'fromDate'],
['toDate', 'date', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],
因為驗證器會按照順序執(zhí)行, 將首先驗證 fromDate
和 toDate
字段是一個有效的日期值惰拱,最終將被轉(zhuǎn)換成一個系統(tǒng)可識別的格式雌贱。 此后這兩個值將使用比對驗證器進行比對。 因日期驗證器只提供服務(wù)端使用弓颈,當前不提供客戶端驗證帽芽, 故 [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-detail) 設(shè)置日期時間格式 和使用 [timestampAttributeTimeZone-detail) 設(shè)置時區(qū)。
注意悉抵,如果使用
timestampAttribute
肩狂,被驗證的值將被轉(zhuǎn)換為UTC標準的時間戳, 所以使用 input time zone 輸入的時區(qū)將被轉(zhuǎn)換為UTC時間基跑。
如果輸入的值是可選的,可以設(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 attributetargetRelation
, which overrides thetargetClass
andtargetAttribute
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]
)猾骡。 這會同時重寫min
和max
屬性。
-
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']
雀彼, 代表http
和https
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)用程序時威脅防范的更多信息的文章。