可用的验证规则

下方列出了所有可用的验证规则及其功能:

accepted

待验证字段必须是 "yes""on"1true。这对于验证「服务条款」的接受或类似字段时很有用。

accepted_if:anotherfield,value,...

如果另一个正在验证的字段等于指定的值,则验证中的字段必须为 "yes""on"1true,这对于验证「服务条款」接受或类似字段很有用。

active_url

根据 dns_get_record PHP 函数,验证中的字段必须具有有效的 A 或 AAAA 记录。 提供的 URL 的主机名使用 parse_url PHP 函数提取,然后传递给 dns_get_record

after:date

待验证字段必须是给定的日期之后的值对应的日期。日期将被传递给 PHP 函数 strtotime,以便转换为有效的 DateTime 实例:

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

你亦可指定另一个要与日期比较的字段,而不是传递要由 strtotime 处理的日期字符串:

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

after_or_equal:date

待验证字段的值对应的日期必须在给定日期之后或与给定的日期相同。可参阅 after 规则获取更多信息。

alpha

待验证字段只能由英文字母组成。

Validate::make(rules: [
    'city' => 'alpha'
])->check(data: [
    'city' => 'Beijing'
]);

如果想验证所有的Unicode字母字符,可添加 `all`选项。4.4.0

Validate::make(rules: [
    'city' => 'alpha:all'
])->check(data: [
    'city' => '北京'
]);

alpha_dash

待验证字段可能包含英文字母、数字、短破折号(-)和下划线(_)。

Validate::make(rules: [
    'city' => 'alpha_dash'
])->check(data: [
    'city' => 'shang-hai'
]);

如果想验证所有的Unicode字母字符,可添加 `all`选项。 4.4.0

Validate::make(rules: [
    'city' => 'alpha_dash:all'
])->check(data: [
    'city' => '中国-上海'
]);

alpha_num

待验证字段只能由英文字母和数字组成。

Validate::make(rules: [
    'city' => 'alpha_num'
])->check(data: [
    'city' => 'China1949'
]);

如果想验证所有的Unicode字母字符,可添加 `all`选项。 4.4.0

Validate::make(rules: [
    'city' => 'alpha_num:all'
])->check(data: [
    'city' => '中国1949'
]);

array

待验证字段必须是有效的 PHP 数组

如果想验证数组必须为数字为索引的数组,可使用@keyInt参数

'ids' => 'array:@keyInt'

当向 array 规则提供附加值时,输入数组中的每个键都必须出现在提供给规则的值列表中。在以下示例中,输入数组中的 admin 键无效,因为它不包含在提供给 array 规则的值列表中:

use Itwmw\Validate\Validate;

$input = [
    'user' => [
        'name' => 'Taylor Otwell',
        'username' => 'taylorotwell',
        'admin' => true,
    ],
];

Validate::make( [
    'user' => 'array:username,locale',
])->check($input);

通常,你应该始终指定允许在数组中出现的数组键。否则,验证器的 check 方法将返回所有已验证的数据,包括数组及其所有键,即使这些键没有通过其他嵌套的数组验证规则进行验证。

如果某些键是可选的,可使用中括号括起来

'user' => 'array:username,locale,[admin]'

在上述规则中,username,locale必填,admin可选

注意

当存在@keyInt时,不可以使用其他参数

before:date

待验证字段的值对应的日期必须在给定的日期之前。日期将会传递给 PHP 函数 strtotime。此外,与 after 规则一致,可以将另外一个待验证的字段作为 date 的值。

before_or_equal:date

验证字段必须是在给定日期之前或与之相同的日期。这个日期值将会被传递给 PHP 的 strtotime 函数来计算。除此之外,像 after 规则一样,验证中另一个字段的名称可以作为值传递给 date

between:min,max

验证字段的大小必须在给定的 min 和 max 之间。字符串、数字、数组和文件的计算方式都使用 size 方法。

boolean

验证的字段必须可以转换为 Boolean 类型。 可接受的输入为 truefalse10"1""0"

chs

待验证字段只能由中文组成。

chs_alpha

待验证字段只能由中文和字母组成。

chs_dash

待验证字段可能包含中文、英文字母、数字、短破折号(-)和下划线(_)。

chs_alpha_num

待验证字段可能包含中文、字母和数字。

confirmed

验证字段必须具有匹配字段 {field}_confirmation 。例如,验证字段为 password ,输入中必须存在与之匹配的 password_confirmation 字段。

date

根据 PHP strtotime 函数,验证的字段必须是有效的日期。

date_equals:date

验证字段必须等于给定日期。日期将传递到 PHP strtotime 函数中,以便转换为有效的 DateTime 实例。

date_format:format

验证字段必须匹配给定的 format(日期格式)。当验证某个字段的时候,你应该只使用 date 或者 date_format,而不是同时使用。此验证规则支持 PHP 所有的 DateTime在新窗口打开 类。

decimal:min,max 4.4.0

被验证的字段必须是数字,并且必须包含指定的小数位数。

// 必须正好有两位小数(9.99)...
'price' => 'decimal:2'
 
// 必须有2到4位小数...
'price' => 'decimal:2,4'

declined

被验证的字段必须是 "no", "off", 0, 或 false.

declined_if:anotherfield,value,...

如果指定的字段等于一个指定的值,那么当前字段必须是"no", "off", 0, 或 false.

different:field

验证的字段值必须与字段 field 的值不同。

digits:value

验证的字段必须为 numeric,并且必须具有确切长度 value

digits_between:min,max

验证的字段必须为 numeric,并且长度必须在给定的 minmax 之间。

dimensions

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

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

可用的规则为: min_widthmax_widthmin_heightmax_heightwidthheightratio

ratio 约束应该表示为宽度除以高度。 这可以通过像 3/2 这样的语句或像 1.5 这样的 float 来指定:

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

distinct

验证数组时,指定的字段不能有任何重复值。

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

默认情况下,Distinct 使用松散的变量比较。要使用严格比较,您可以在验证规则定义中添加 strict 参数:

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

你可以在验证规则的参数中添加 ignore_case,以使规则忽略大小写差异:

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

doesnt_start_with:foo,bar,... 4.3.0

验证的字段不能以给定的任意值开始。

doesnt_end_with:foo,bar,... 4.3.0

验证的字段不能以给定的任意值结束。

email

验证字段是否为email格式

'email' => 'email'

ends_with:foo,bar,...

验证的字段必须以给定的值之一结尾。

exclude

check方法中将会排除掉当前验证的字段。

exclude_if:anotherfield,value

如果 anotherfield 等于 valuecheck 方法中会排除掉当前的字段。

exclude_unless:anotherfield,value

除非 anotherfield 等于 value ,否则 check 方法中会排除掉当前的字段。

exclude_with:anotherfield 4.2.2

如果表单中存在 anotherfield,那么check方法中将会排除掉当前验证的字段。

exclude_without:anotherfield

如果 anotherfield 不在表单数据中,check 方法中会排除掉当前的字段。

exists:table,column

验证的字段必须存在于给定的数据库表中。

Exists 规则的基本用法

'state' => 'exists:states'

如果未指定 column 选项,则将使用字段名称。因此,在这种情况下,该规则将验证 states 数据库表是否包含一条记录,该记录的 states 列的值与请求的 states 属性值匹配。

指定自定义列名

你可以将验证规则使用的数据库列名称指定在数据库表名称之后:

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

如果你需要指定 exists 方法用来查询的数据库。你可以通过使用「点」语法将数据库的名称添加到数据表前面来实现这个目的:

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

如果需要增加额外的条件。您可以在第三个参数开始写入你的条件:

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

条件可多个,但必须成对出现

如果想引入其他的验证数据中的值,可使用[field]来表示

file

验证的字段必须是成功上传的文件。

filled

验证的字段在存在时不能为空。

gt:field

验证字段必须大于给定的 field。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

gte:field

验证字段必须大于或等于给定的 field 。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

id_card 4.4.0

被验证的字段必须是合法的中国居民身份证格式。

image

验证的文件必须是图片(jpg,jpeg,png,bmp,gif,svg,或 webp)。

in:foo,bar,...

验证字段必须包含在给定的值列表中。

Validate::make([
    'type' => 'required|in:save,update,delete'
])->check($data);

in_array:anotherfield.*

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

integer

验证的字段必须是整数。

注意:此种验证规则不是验证数据是 「integer」 类型,仅验证输入为 PHP 函数 FILTER_VALIDATE_INT 规则接受的类型。如果你需要验证输入为数字,请将此规则与 numeric 验证规则 结合使用。

ip

验证的字段必须是 IP 地址。

ipv4

验证的字段必须是 IPv4 地址。

ipv6

验证的字段必须是 IPv6 地址。

mac_address

验证的字段必须是 Mac 地址。

mobile 4.4.0

验证的字段必须是合法的中国手机号码。

json

验证的字段必须是有效的 JSON 字符串。

lt:field

验证的字段必须小于给定的字段。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与 size 方法进行评估。

lte:field

验证中的字段必须小于或等于给定的 字段 。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与 size 方法进行评估。

lowercase 4.4.0

被验证的字段必须是小写。

max:value

验证中的字段必须小于或等于 value。字符串、数字、数组或是文件大小的计算方式都用 size 规则。

max_digits:value 4.3.0

被验证的字段必须为数值且长度不可大于value

mimetypes:text/plain,...

验证的文件必须具备与列出的其中一个扩展相匹配的 MIME 类型:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

为了确定上传文件的 MIME,框架将会读取文件,然后自动推测文件 MIME 类型,这可能与客户端提供的 MIME 类型不一致。

mimes:foo,bar,...

验证的文件必须具有与列出的其中一个扩展名相对应的 MIME 类型。

MIME 规则基本用法

'photo' => 'mimes:jpg,bmp,png'

即使你可能只需要验证指定扩展名,但此规则实际上会去验证文件的 MIME 类型,其通过读取文件内容来推测它的 MIME 类型。

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

https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types在新窗口打开

min:value

验证字段必须具有最小值 value。 字符串,数值,数组,文件大小的计算方式都与 size 规则一致.

min_digits:value 4.3.0

被验证的字段必须为数值且长度不能小于value

multiple_of:value

验证字段必须是 value 的倍数。

missing 4.4.0

验证字段不能出现在正在验证的数据中。

missing_if:anotherfield,value,... 4.4.0

如果 anotherfield 字段等于 value,则正在验证的字段必须不存在。

missing_unless:anotherfield,value 4.4.0

如果 anotherfield 字段不等于 value,则正在验证的字段必须不存在。

missing_with:foo,bar,... 4.4.0

只有当其他指定的字段存在时,验证中的字段才必须不存在。

missing_with_all:foo,bar,... 4.4.0

只有当所有其他指定的字段都存在时,验证中的字段才必须不存在。

not_in:foo,bar,...

验证字段不能包含在给定的值的列表中。

Validate::make([
    'type' => 'required|notIn:save,update,delete'
])->check($data);

not_regex:pattern

验证字段必须与给定的正则表达式不匹配。

验证时,这个规则使用 PHP preg_match 函数。指定的模式应遵循 preg_match 所需的相同格式,也包括有效的分隔符。 例如: 'email' => 'not_regex:/^.+$/i'

正则中包含`|`

可以使用数组来指定规则,或者在验证器中使用regex属性来指定正则表达式规则

nullable

验证字段可以为 null

numeric

验证字段必须为 数值在新窗口打开

present

验证字段必须存在于输入数据中,但可以为空。

prohibited

被验证的字段必须为空或不存在。

prohibited_if:anotherfield,value,...

如果 anotherfield 字段等于任何值,则验证中的字段必须为空或不存在。

prohibited_unless:anotherfield,value,...

验证中的字段必须为空或不存在,除非 anotherfield 字段等于 value 。

prohibits:anotherfield,...

如果验证中的字段存在,则 anotherfield 中不能存在任何字段,即使该字段为空。

regex:pattern

验证字段必须与给定的正则表达式匹配。

验证时,这个规则使用 PHP 的 preg_match 函数。 指定的模式应遵循 preg_match 所需的相同格式,也包括有效的分隔符。 例如: 'email' => 'not_regex:/^.+$/i'

正则中包含`|`

可以使用数组来指定规则,或者在验证器中使用regex属性来指定正则表达式规则

required

验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」:

  • 值为 null
  • 值为空字符串。
  • 值为空数组或空 Countable 对象。
  • 值为无路径的上传文件。

required_if:anotherfield,value,...

如果其它字段 _anotherfield_ 为任意 value,则此验证字段必须存在且不为空。

required_if_accepted:anotherfield 4.3.0

如果其它字段 _anotherfield_接受时,则此验证字段必须存在且不为空。

required_unless:anotherfield,value,...

如果其它字段 anotherfield 不等于任意值 value ,则此验证字段必须存在且不为空。

required_with:foo,bar,...

在其他任一指定字段出现时,验证的字段才必须存在且不为空。

required_with_all:foo,bar,...

只有在其他指定字段全部出现时,验证的字段才必须存在且不为空。

required_without:foo,bar,...

在其他指定任一字段不出现时,验证的字段才必须存在且不为空。

required_without_all:foo,bar,...

只有在其他指定字段全部不出现时,验证的字段才必须存在且不为空。

required_array_keys:foo,bar,...

被验证的字段必须是一个数组,并且必须包含指定的键。

same:field

验证字段的值必须与给定字段的值相同。

size:value

验证字段必须与给定的 value 大小一致。对于字符串,value 对应字符数。对于数字,value 对应给定的整数值(该属性必须有 numeric 或者 integer 规则)。 对于数组,size 对应数组的 count 值。对于文件,size 对应文件大小(单位 kB)。 让我们来看几个例子:

// 验证字符串长度是否为 12...
'title' => 'size:12';

// 验证数字是否为 10...
'seats' => 'integer|size:10';

// 验证数组的长度(拥有的元素)是否为 5...
'tags' => 'array|size:5';

// 验证上传的文件是否为 512 kB...
'image' => 'file|size:512';

size规则同样也支持其他字段,需要对比判断时,直接写入其他字段名称即可

Validate::make( [
    'title' => 'string|size:length'
])->check([
    'length' => 2,
    'title' => '标题'
]);

Validate::make( [
    'ids' => 'array|size:length'
])->check([
    'length' => 3,
    'ids' => [1,2,3]
]);

starts_with:foo,bar,...

验证字段必须以给定值之一开头。

string

验证字段必须是一个字符串。如果允许这个字段为 null,需要给这个字段分配 nullable 规则。

timezone

验证字段必须为符合 PHP 函数 timezone_identifiers_list 所定义的有效时区标识。

unique:table,column,idColumn,except

验证字段在给定的数据库表中必须是唯一的。

指定自定义数据表 / 列名:

column 选项可用于指定相应数据库列的字段。如果未指定 column 选项,则使用字段本身名称。

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

自定义数据库连接

有时,你可能需要为验证器创建的数据库查询设置自定义连接。为此,你可以在连接名称之前添加表名称:

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

增加额外的条件

如果需要增加额外的条件。您可以在_except_后写入你的条件:

'email' => 'unique:connection.users,email_address,id,[id],account_id,1'

url

验证的字段必须是有效的 URL。

uppercase 4.4.0

被验证的字段必须是大写。

uuid

验证字段必须是有效的 RFC 4122(版本 1,3,4 或 5)通用唯一标识符(UUID)。

按条件增加规则

字段包含特定值跳过验证

如果另一个字段具有给定的值,你可能偶尔希望不验证给定字段。你可以使用 exclude_if 验证规则来实现这一点。在本例中,如果 has_appointment 字段的值为 false ,则不会验证 appointment_datedoctor_name 字段:

use Itwmw\Validate\Validate;

$validator = Validate::make([
    'has_appointment'  => 'required|boolean',
    'appointment_date' => 'exclude_if:has_appointment,false|required|date',
    'doctor_name'      => 'exclude_if:has_appointment,false|required|string',
])->check($data);

你可以使用 exclude_unless 规则来验证给定字段,除非另一个字段具有给定的值:

$validator = Validate::make([
    'has_appointment'  => 'required|boolean',
    'appointment_date' => 'exclude_unless:has_appointment,true|required|date',
    'doctor_name'      => 'exclude_unless:has_appointment,true|required|string',
])->check($data);

存在时则验证

在某些情况下,你可能希望将要验证的字段存在于输入数组中时,才对该字段执行验证。可以在规则列表中增加 sometimes 来实现:

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

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