accepted
验证字段的值必须是 yes、on、1
或 true
,这在“同意服务协议”时很有用。
active_url
验证字段必须是基于 PHP 函数 dns_get_record
的,有 A 或 AAAA 记录的值。
after:date
验证字段必须是给定日期之后的一个值,日期将会通过 PHP 函数 strtotime
传递:
'start_date' => 'required|date|after:tomorrow'
你可以指定另外一个与日期进行比较的字段,而不是传递一个日期字符串给 strtotime
执行:
'finish_date' => 'required|date|after:start_date'
after_or_equal:date
验证字段必须是大于等于给定日期的值,更多信息,请参考 after:date
规则。
alpha
验证字段必须是字母。
alpha_dash
验证字段可以包含字母和数字,以及破折号和下划线。
alpha_num
验证字段必须是字母或数字。
array
验证字段必须是 PHP 数组。
before:date
和 after:date
相对,验证字段必须是指定日期之前的一个数值,日期将会传递给 PHP strtotime
函数。
before_or_equal:date
验证字段必须小于等于给定日期。日期将会传递给 PHP 的 strtotime
函数。
between:min,max
验证字段大小在给定的最小值和最大值之间,字符串、数字、数组和文件都可以像使用 size
规则一样使用该规则:
'name' => 'required|between:1,20'
boolean
验证字段必须可以被转化为布尔值,接收 true, false, 1, 0, "1"
和 “0
” 等输入。
confirmed
验证字段必须有一个匹配字段 foo_confirmation
,例如,如果验证字段是 password
,必须输入一个与之匹配的 password_confirmation
字段。
date
验证字段必须是一个基于 PHP strtotime
函数的有效日期
date_equals:date
验证字段必须等于给定日期,日期会被传递到 PHP strtotime
函数。
date_format:format
验证字段必须匹配指定格式,可以使用 PHP 函数date
或 date_format
验证该字段。
different:field
验证字段必须是一个和指定字段不同的值。
digits:value
验证字段必须是数字且长度为 value
指定的值。
digits_between:min,max
验证字段数值长度必须介于最小值和最大值之间。
dimensions
验证的图片尺寸必须满足该规定参数指定的约束条件:
'avatar' => 'dimensions:min_width=100,min_height=200'
有效的约束条件包括:min_width
, max_width
, min_height
, max_height
, width
, height
, ratio
。
ratio
约束宽度/高度的比率,这可以通过表达式 3/2 或浮点数 1.5 来表示:
'avatar' => 'dimensions:ratio=3/2'
由于该规则要求多个参数,可以使用 Rule::dimensions
方法来构造该规则:
use Illuminate\Validation\Rule;
Validator::make($data, [
'avatar' => [
'required',
Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),
],
]);
distinct
处理数组时,验证字段不能包含重复值:
'foo.*.id' => 'distinct'
验证字段必须是格式正确的电子邮件地址
exists:table,column
验证字段必须存在于指定数据表
基本使用:
'state' => 'exists:states'
指定自定义列名:
'`state' => 'exists:states,abbreviation'`
有时,你可能需要为 exists 查询指定要使用的数据库连接,这可以在表名前通过.前置数据库连接来实现:
'email' => 'exists:connection.staff,email'
如果你想要自定义验证规则执行的查询,可以使用 Rule 类来定义规则。在这个例子中,我们还以数组形式指定了验证规则,而不是使用 | 字符来限定它们:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
file
验证字段必须是上传成功的文件。
filled
验证字段如果存在则不能为空。
gt:field
验证字段必须大于给定 field
字段,这两个字段类型必须一致,适用于字符串、数字、数组和文件,和 size
规则类似
gte:field
验证字段必须大于等于给定 field
字段,这两个字段类型必须一致,适用于字符串、数字、数组和文件,和 size
规则类似
image
验证文件必须是图片(jpeg、png、bmp、gif 或者 svg)
in:foo,bar…
验证字段值必须在给定的列表中,由于该规则经常需要我们对数组进行 implode
,我们可以使用 Rule::in
来构造这个规则:
use Illuminate\Validation\Rule;
Validator::make($data, [
'zones' => [
'required',
Rule::in(['first-zone', 'second-zone']),
],
]);
in_array
:另一个字段
验证字段必须在另一个字段值中存在。
integer
验证字段必须是整型。
ip
验证字段必须是IP地址。
ipv4
验证字段必须是IPv4地址。
ipv6
验证字段必须是IPv6地址。
json
验证字段必须是有效的JSON字符串
lt:field
验证字段必须小于给定 field 字段,这两个字段类型必须一致,适用于字符串、数字、数组和文件,和 size
规则类似
lte:field
验证字段必须小于等于给定 field
字段,这两个字段类型必须一致,适用于字符串、数字、数组和文件,和 size
规则类似
max:value
验证字段必须小于等于最大值,和字符串、数值、数组、文件字段的 size
规则使用方式一样。
mimetypes:text/plain…
验证文件必须匹配给定的 MIME 文件类型之一:
'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'
为了判断上传文件的 MIME 类型,框架将会读取文件内容来猜测 MIME 类型,这可能会和客户端 MIME 类型不同。
mimes:foo,bar,…
验证文件的 MIME 类型必须是该规则列出的扩展类型中的一个
MIME 规则的基本使用:
'photo' => 'mimes:jpeg,bmp,png'
尽管你只是指定了扩展名,该规则实际上验证的是通过读取文件内容获取到的文件 MIME 类型。
完整的 MIME 类型列表及其相应的扩展可以在这里找到:http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
min:value
与 max:value
相对,验证字段必须大于等于最小值,对字符串、数值、数组、文件字段而言,和 size 规则使用方式一致。
not_in:foo,bar,…
验证字段值不能在给定列表中,和 in 规则类似,我们可以使用 Rule::notIn 方法来构建规则:
use Illuminate\Validation\Rule;
Validator::make($data, [
'toppings' => [
'required',
Rule::notIn(['sprinkles', 'cherries']),
],
]);
not_regex:pattern
验证字段不能匹配给定正则表达式
注:使用 regex/not_regex
模式时,规则必须放在数组中,而不能使用管道分隔符,尤其是正则表达式中包含管道符号时。
nullable
验证字段可以是 null
,这在验证一些可以为 null
的原始数据如整型或字符串时很有用。
numeric
验证字段必须是数值
present
验证字段必须出现在输入数据中但可以为空。
regex:pattern
验证字段必须匹配给定正则表达式。
注:使用 regex/not_regex
模式时,规则必须放在数组中,而不能使用管道分隔符,尤其是正则表达式中包含管道符号时。
required
验证字段值不能为空,以下情况字段值都为空:
值为null
值是空字符串
值是空数组或者空的 Coutable 对象
值是上传文件但路径为空
required_if:anotherfield,value,…
验证字段在 anotherfield 等于指定值 value 时必须存在且不能为空
required_unless:anotherfield,value,…
除非 anotherfield
字段等于 value
,否则验证字段不能空
required_with:foo,bar,…
验证字段只有在任一其它指定字段存在的情况才是必须的
required_with_all:foo,bar,…
验证字段只有在所有指定字段存在的情况下才是必须的
required_without:foo,bar,…
验证字段只有当任一指定字段不存在的情况下才是必须的
required_without_all:foo,bar,…
验证字段只有当所有指定字段不存在的情况下才是必须的
same:field
给定字段和验证字段必须匹配
size:value
验证字段必须有和给定值 value
相匹配的尺寸/大小,对字符串而言,value
是相应的字符数目;对数值而言,value
是给定整型值;对数组而言,value
是数组长度;对文件而言,value
是相应的文件千字节数(KB)
string
验证字段必须是字符串,如果允许字段为空,需要分配 nullable
规则到该字段。
timezone
验证字符必须是基于 PHP 函数 timezone_identifiers_list
的有效时区标识
unique:table,column,except,idColumn
验证字段在给定数据表上必须是唯一的,如果不指定 column
选项,字段名将作为默认 column
。
指定自定义列名:
'email' => 'unique:users,email_address'
自定义数据库连接
有时候,你可能需要自定义验证器生成的数据库连接,正如上面所看到的,设置 unique:users
作为验证规则将会使用默认数据库连接来查询数据库。要覆盖默认连接,在数据表名后使用“.”指定连接:
'email' => 'unique:connection.users,email_address'
强制一个忽略给定 ID 的唯一规则:
有时候,你可能希望在唯一检查时忽略给定 ID,例如,考虑一个包含用户名、邮箱地址和位置的”更新属性“界面,你将要验证邮箱地址是唯一的,然而,如果用户只改变用户名字段而并没有改变邮箱字段,你不想要因为用户已经拥有该邮箱地址而抛出验证错误,你只想要在用户提供的邮箱已经被别人使用的情况下才抛出验证错误。
要告诉验证器忽略用户 ID,可以使用 Rule 类来定义这个规则,我们还要以数组方式指定验证规则,而不是使用 | 来界定规则:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
如果你的数据表使用主键字段不是 id,可以在调用 ignore
方法的时候指定字段名称:
'email' => Rule::unique('users')->ignore($user->id, 'user_id')
添加额外的 where
子句:
使用 where
方法自定义查询的时候还可以指定额外查询约束,例如,下面我们来添加一个验证 account_id
为 1 的约束:
'email' => Rule::unique('users')->where(function ($query) {
$query->where('account_id', 1);
})
url
验证字段必须是有效的 URL。