accepted

验证字段值是否为 yeson1、或 true。这在确认「服务条款」是否同意时相当有用。

active_url

根据 PHP 函数 dns_get_record,判断要验证的字段必须具有有效的 A 或 AAAA 记录。

after:date

验证字段是否是在指定日期之后。这个日期将会通过 strtotime 函数来验证。

'start_date' => 'required|date|after:tomorrow'

作为替换 strtotime 传递的日期字符串,你可以指定其它的字段来比较日期:

'finish_date' => 'required|date|after:start_date'

after_or_equal:date

验证字段必需是等于指定日期或在指定日期之后。更多信息请参见 after 规则。

alpha

验证字段值是否仅包含字母字符。

alpha_dash

验证字段值是否仅包含字母、数字、破折号( - )以及下划线( _ )。

alpha_num

验证字段值是否仅包含字母、数字。

array

验证字段必须是一个 PHP 数组。

before:date

验证字段是否是在指定日期之前。这个日期将会通过 strtotime 函数来验证。

before_or_equal:date

验证字段是否是在指定日期之前。这个日期将会使用 PHP strtotime 函数来验证。

between:min,max

验证字段值的大小是否介于指定的 minmax 之间。字符串、数值或是文件大小的计算方式和 size 规则相同。

boolean

验证字段值是否能够转换为布尔值。可接受的参数为 truefalse10"1" 以及 "0"

confirmed

验证字段值必须和 foo_confirmation 的字段值一致。例如,如果要验证的字段是 password,就必须和输入数据里的 password_confirmation 的值保持一致。

date

验证字段值是否为有效日期,会根据 PHP 的 strtotime 函数来做验证。

date_format:format

验证字段值符合指定的日期格式 (format)。你应该只使用 datedate_format 当中的 其中一个 用于验证,而不应该同时使用两者。

different:field

验证字段值是否和指定的字段 (field) 有所不同。

digits:value

验证字段值是否为 numeric 且长度为 value

digits_between:min,max

验证字段值的长度是否在 minmax 之间。

dimensions

验证的文件必须是图片并且图片比例必须符合规则:

'avatar' => 'dimensions:min_width=100,min_height=200'

可用的规则为: min_widthmax_widthmin_heightmax_heightwidthheightratio

比例应该使用宽度除以高度的方式出现。能够使用 3/2 这样的形式设置,也可以使用 1.5 这样的浮点方式:

'avatar' => 'dimensions:ratio=3/2'

Since this rule requires several arguments, you may use the method to fluently construct the rule:

由于此规则需要多个参数,因此您可以 Rule::dimensions 方法来构造规则:

distinct

当你在验证数组的时候,你可以指定某个值必须是唯一的:

'foo.*.id' => 'distinct'

email

验证字段值是否符合 e-mail 格式。

exists:table,column

验证字段值是否存在指定的数据表中。

Exists 规则的基本使用方法

'state' => 'exists:states'

指定一个特定的字段名称

'state' => 'exists:states,abbreviation'

有时,您可能需要指定要用于 exists 查询的特定数据库连接。你可以使用点「.」语法将数据库连接名称添加到数据表前面来实现这个目的:

'email' => 'exists:connection.staff,email'

如果您想自定义由验证规则执行的查询,您可以使用 Rule 类流畅地定义规则。在这个例子中,我们还将使用数组指定验证规则,而不是使用 | 字符来分隔它们:

file

必须是成功上传的文件。

filled

验证的字段必须带有内容。

image

验证字段文件必须为图片格式( jpeg、png、bmp、gif、或 svg )。

in:foo,bar,...

验证字段值是否有在指定的列表里面。因为这个规则通常需要你 implode 一个数组,Rule::in 方法可以用来流利地构造规则:

in_array:anotherfield

验证的字段必须存在于 anotherfield 的值中。

integer

验证字段值是否是整数。

ip

验证字段值是否符合 IP address 的格式。

ipv4

验证字段值是否符合 IPv4 的格式。

ipv6

验证字段值是否符合 IPv6 的格式。

json

验证字段是否是一个有效的 JSON 字符串。

max:value

字段值必须小于或等于 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 类型。

完整的 MIME 类型及对应的扩展名列表可以在下方链接找到:

min:value

字段值必须大于或等于 value。字符串、数值或是文件大小的计算方式和 size 规则相同。

nullable

验证的字段可以为 null。这在验证基本数据类型,如字符串和整型这些能包含 null 值的数据类型中特别有用。

not_in:foo,bar,...

验证字段值是否不在指定的列表里。

numeric

验证字段值是否为数值。

present

验证的字段必须出现,并且数据可以为空。

regex:pattern

验证字段值是否符合指定的正则表达式。

Note: 当使用 regex 规则时,你必须使用数组,而不是使用管道分隔规则,特别是当正则表达式含有管道符号时。

required

验证字段必须存在输入数据,且不为空。字段符合下方任一条件时即为「空」:

  • 该值为 null.
  • 该值为空字符串。
  • 该值为空数组或空的 可数 对象。
  • 该值为没有路径的上传文件。

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

验证字段值和指定的 字段( field ) 值是否相同。

size:value

验证字段值的大小是否符合指定的 value 值。对于字符串来说,value 为字符数。对于数字来说,value 为某个整数值。对文件来说,size 对应的是文件大小(单位 kb )。

string

验证字段值的类型是否为字符串。如果你允许字段的值为 null ,那么你应该将 nullable 规则附加到字段中。

timezone

验证字段值是否是有效的时区,会根据 PHP 的 timezone_identifiers_list 函数来判断。

unique:table,column,except,idColumn

在指定的数据表中,验证字段必须是唯一的。如果没有指定 column,将会使用字段本身的名称。

指定一个特定的字段名称:

'email' => 'unique:users,email_address'

自定义数据库连接

有时,您可能需要为验证程序所做的数据库查询设置自定义连接。如上面所示,如上所示,将 unique:users 设置为验证规则将使用默认数据库连接来查询数据库。如果要修改数据库连接,请使用「点」语法指定连接和表名:

'email' => 'unique:connection.users,email_address'

强迫 Unique 规则忽略指定 ID:

有时候,你希望在进行字段唯一性验证时对指定 ID 进行忽略。例如,在「更新个人资料」页面会包含用户名、邮箱等字段。这时你会想要验证更新的 E-mail 值是否为唯一的。如果用户仅更改了名称字段而没有改 E-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 E-mail 的拥有者了。若要用指定规则来忽略用户 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_id1 约束条件:

'email' => Rule::unique('users')->where(function ($query) {
    $query->where('account_id', 1);
})

url

验证字段必需是有效的 URL 格式。

按条件增加规则

当字段存在的时候进行验证

在某些情况下,你可能 只想 在输入数据中有此字段时才进行验证。可通过增加 sometimes 规则到规则列表来实现:

$v = Validator::make($data, [
    'email' => 'sometimes|required|email',
]);

在上面的例子中,email 字段的验证只会在 $data 数组有此字段时才会进行。

复杂的条件验证

有时候你可能希望增加更复杂的验证条件,例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段有值时,另外两个字段要拥有符合的特定值。增加这样的验证条件并不难。首先,利用你熟悉的 static rules 来创建一个 Validator 实例:

$v = Validator::make($data, [
    'email' => 'required|email',
    'games' => 'required|numeric',
]);

假设我们有一个专为游戏收藏家所设计的网页应用程序。如果游戏收藏家收藏超过一百款游戏,我们会希望他们来说明下为什么他们会拥有这么多游戏。比如说他们有可能经营了一家二手游戏商店,或者只是为了享受收集的乐趣。为了在特定条件下加入此验证需求,可以在 Validator 实例中使用 sometimes 方法。

$v->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
});

传入 sometimes 方法的第一个参数是我们要用条件认证的字段名称。第二个参数是我们想使用的验证规则。闭包作为第三个参数传入,如果其返回 true,则额外的规则就会被加入。这个方法可以轻松的创建复杂的条件式验证。你甚至可以一次对多个字段增加条件式验证:

$v->sometimes(['reason', 'cost'], 'required', function ($input) {
    return $input->games >= 100;
});
{tip} 传入 闭包$input 参数是 Illuminate\Support\Fluent 实例,可用来访问你的输入或文件对象。

验证数组

验证基于数组的表单输入字段并不一定是一件痛苦的事情。要验证指定数组输入字段中的每一个 email 是否唯一,可以这么做:

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users',
    'person.*.first_name' => 'required_with:person.*.last_name',
]);

同理,你在语言文件定义验证信息的时候可以使用星号 * 字符,可以更加容易的在基于数组格式的字段中使用相同的验证信息:

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique e-mail address',
    ]
],

自定义验证规则