🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## laravel 可用验证规则 ## 可用的验证规则 下方列出了所有可用的验证规则及其功能: Accepted Active URL After (Date) After Or Equal (Date) Alpha Alpha Dash Alpha Numeric Array Bail Before (Date) Before Or Equal (Date) Between Boolean Confirmed Date Date Equals Date Format Different Digits Digits Between Dimensions (Image Files) Distinct Email Ends With Exclude If Exclude Unless Exists (Database) File Filled Greater Than Greater Than Or Equal Image (File) In In Array Integer IP Address JSON Less Than Less Than Or Equal Max MIME Types MIME Type By File Extension Min Not In Not Regex Nullable Numeric Password Present Regular Expression Required Required If Required Unless Required With Required With All Required Without Required Without All Same Size Sometimes Starts With String Timezone Unique (Database) URL UUID #### accepted 待验证字段必须是*yes*,*on*,*1*或*true*。这在确认「服务条款」是否同意时很有用。 #### active\_url 根据 PHP 函数`dns_get_record`,验证字段必须具有有效的 A 或 AAAA 记录。URL 所提供的主机名时在传递给`dns_get_record`函数前使用`parse_url`函数获取到的。 #### after:*date* 待验证字段必须是给定的日期之后的值对应的日期。日期将被传递给 PHP 函数`strtotime`: ~~~php 'start_date' => 'required|date|after:tomorrow' ~~~ 您亦可指定另一个要与日期比较的字段,而不是传递要由`strtotime`处理的日期字符串: ~~~php 'finish_date' => 'required|date|after:start_date' ~~~ #### after\_or\_equal:*date* 待验证字段的值对应的日期必须在给定日期之后或与给定的日期相同。可参阅[after](https://learnku.com/docs/laravel/8.x/validation/9374#rule-after)规则获取更多信息。 #### alpha 待验证字段只能由字母组成。 #### alpha\_dash 待验证字段可能包含字母、数字,短破折号(-)和下划线(\_)。 #### alpha\_num 待验证字段只能由字母和数字组成。 #### array 待验证字段必须是有效的 PHP`数组`。 #### bail 在首次验证失败后立即终止验证。 #### before:*date* 待验证字段的值对应的日期必须在给定的日期之前。日期将会传递给 PHP 函数`strtotime`。此外,与[`after`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-after)规则一致,可以将另外一个待验证的字段作为`date`的值。 #### before\_or\_equal:*date* 验证字段必须是在给定日期之前或与之相同的日期。这个日期值将会被传递给 PHP 的`strtotime`函数来计算。除此之外,像[`after`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-after)规则一样,验证中另一个字段的名称可以作为值传递给`date`。 #### between:*min*,*max* 验证字段的大小必须在给定的 min 和 max 之间。字符串、数字、数组和文件的计算方式都使用[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)方法。 #### boolean 验证的字段必须可以转换为 Boolean 类型。 可接受的输入为`true`,`false`,`1`,`0`,`"1"`和`"0"`。 #### confirmed 验证字段必须具有匹配字段`foo_confirmation`。例如,验证字段为`password`,输入中必须存在与之匹配的`password_confirmation`字段。 #### date 根据 PHP`strtotime`函数,验证的字段必须是有效的日期。 #### date\_equals:date 验证字段必须等于给定日期。日期将传递到 PHP`strtotime`函数。 #### date\_format:*format* 验证字段必须匹配给定的日期格式。当验证某个字段的时候,你应该 只使用`date`或者`date_format`,而不是同时使用。此验证规则支持 PHP 所有的[DateTime](https://www.php.net/manual/en/class.datetime.php)类。 #### different:*field* 验证的字段值必须与字段*field*的值不同。 #### digits:*value* 验证的字段必须为`numeric`,并且必须具有确切长度 \_value\_。 #### digits\_between:*min*,*max* 验证中的字段必须为`numeric`,并且长度必须在给定的*min*和*max*之间。 #### dimensions 验证的文件必须是图片并且图片比例必须符合规则: ~~~php 'avatar' => 'dimensions:min_width=100,min_height=200' ~~~ 可用的规则为:*min\_width*,*max\_width*,*min\_height*,*max\_height*,*width*,*height*,*ratio*. *ratio*约束应该表示为宽度除以高度。 这可以通过像`3/2`这样的语句或像`1.5`这样的`float`来指定:: ~~~php 'avatar' => 'dimensions:ratio=3/2' ~~~ 由于此规则需要多个参数,因此你可以`Rule::dimensions`方法来构造可读性高的规则: ~~~php use Illuminate\Validation\Rule; Validator::make($data, [ 'avatar' => [ 'required', Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2), ], ]); ~~~ #### distinct 验证数组时,指定的字段不能有任何重复值。 ~~~php 'foo.*.id' => 'distinct' ~~~ #### email 验证的字段必须符合`e-mail`地址格式。当前版本,此种验证规则由[`egulias/email-validator`](https://github.com/egulias/EmailValidator)提供支持。默认使用 RFCValidation 验证样式,但你也可以使其他验证样式: ~~~php 'email' => 'email:rfc,dns' ~~~ 例子使用`RFCValidation`和`DNSCheckValidation`验证样式。所有可用验证样式列表: * `rfc`:`RFCValidation` * `strict`:`NoRFCWarningsValidation` * `dns`:`DNSCheckValidation` * `spoof`:`SpoofCheckValidation` * `filter`:`FilterEmailValidation` 当下版本`filter`验证规则使用 PHP 的`filter_var`方法进行验证,在 5.8 版本接入 Laravel 。`dns`和`spoof`验证器需要 PHP 的`intl`扩展。 #### ends\_with:*foo*,*bar*,… 验证的字段必须以给定的值之一结尾。 #### exclude\_if:*anotherfield*,*value* 如果\_anotherfield\_字段等于\_value\_,验证下的字段将被`validate`和`validated`方法返回的请求数据排除。 #### exclude\_unless:*anotherfield*,*value* 验证下的字段将被`validate`和`validated`方法返回的请求数据排除,除非*anotherfield*的字段等于*value*。 #### exists:*table*,*column* 验证的字段必须存在于给定的数据库表中。 #### Exists 规则的基本用法 ~~~php 'state' => 'exists:states' ~~~ 如果未指定`column`选项,则将使用字段名称。 #### 指定列名 ~~~php 'state' => 'exists:states,abbreviation' ~~~ 如果你需要指定`exists`方法用来查询的数据库。你可以通过使用「点」语法将数据库的名称添加到数据表前面来实现这个目的: ~~~php 'email' => 'exists:connection.staff,email' ~~~ 你也可以使用关联模型来指定表名。 ~~~php 'user_id' => 'exists:App\Models\User,id' ~~~ 如果要自定义验证规则执行的查询,可以使用`Rule`类来定义规则。在这个例子中,我们使用数组指定验证规则,而不是使用`|`字符来分隔它们: ~~~php 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`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)进行相同的评估。 #### gte:*field* 验证字段必须大于或等于给定的*field*。两个字段必须是相同的类型。字符串、数字、数组和文件都使用[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)进行相同的评估。 #### image 验证的文件必须是图片 (jpeg, png, bmp, gif, svg, or webp) #### in:*foo*,*bar*,… 验证字段必须包含在给定的值列表中。由于此规则通常要求您`implode`数组,因此可以使用`Rule::in`方法流畅地构造规则: ~~~php use Illuminate\Validation\Rule; Validator::make($data, [ 'zones' => [ 'required', Rule::in(['first-zone', 'second-zone']), ], ]); ~~~ #### in\_array:*anotherfield*.\* 验证的字段必须存在于另一个字段*anotherfield*的值中。 #### integer 验证的字段必须是整数。 > 注意:此种验证规则不是验证数据是 「integer」 类型,仅验证字符串或数值包含一个「integer」。 #### ip 验证的字段必须是 IP 地址。 #### ipv4 验证的字段必须是 IPv4 地址。 #### ipv6 验证的字段必须是 IPv6 地址。 #### json 验证的字段必须是有效的 JSON 字符串。 #### lt:*field* 验证的字段必须小于给定的字段。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)方法进行评估。 #### lte:*field* 验证中的字段必须小于或等于给定的 字段 。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)方法进行评估。 #### max:*value* 验证中的字段必须小于或等于`value`。字符串、数字、数组或是文件大小的计算方式都用[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)规则。 #### mimetypes:*text/plain*,… 验证的文件必须具备与列出的其中一个扩展相匹配的 MIME 类型: ~~~php 'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime' ~~~ 为了确定上传文件的 MIME,框架将会读取文件,然后自动推测文件 MIME 类型,这可能与客户端提供的 MIME 类型不一致 。 #### mimes:*foo*,*bar*,… 验证的文件必须具有与列出的其中一个扩展名相对应的 MIME 类型。 #### MIME 规则基本用法 ~~~php 'photo' => 'mimes:jpeg,bmp,png' ~~~ 即使你可能只需要验证指定扩展名,但此规则实际上会去验证文件的 MIME 类型,其通过读取文件内容来推测它的 MIME 类型。 可以在以下链接中找到完整的 MIME 类型列表及相对应的扩展名:[svn.apache.org/repos/asf/httpd/htt...](https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) #### min:*value* 验证字段必须具有最小值。 字符串,数值,数组,文件大小的计算方式都与[`size`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-size)规则一致. #### not\_in:*foo*,*bar*,… 验证字段不能包含在给定的值的列表中。 使用`Rule::notIn`方法可以更流畅的构建这个规则: ~~~php use Illuminate\Validation\Rule; Validator::make($data, [ 'toppings' => [ 'required', Rule::notIn(['sprinkles', 'cherries']), ], ]); ~~~ #### not\_regex:*pattern* 验证字段必须与给定的正则表达式不匹配。 验证时,这个规则使用 PHP`preg_match`函数。指定的模式应遵循`preg_match`所需的相同格式,也包括有效的分隔符。 例如:`'email' => 'not_regex:/^.+$/i'`。 \*\*注意:\*\*当使用`regex`/`not_regex`模式时, 可能需要在数组中指定规则,而不是使用`|`分隔符 ,特别是在正则表达式包含`|`字符 的情况下。 #### nullable 验证字段可以为`null`。这在验证基本数据类型时特别有用,例如可以包含空值的字符串和整数。 #### numeric 验证字段必须为数值。 #### password 验证字段必须与当前登录用户的密码相同。你可以通过传入第一个参数来指定身份验证看守器(Authentication Guard)。 ~~~php 'password' => 'password:api' ~~~ #### present 验证字段必须存在于输入数据中,但可以为空。 #### regex:*pattern* 验证字段必须与给定的正则表达式匹配。 验证时,这个规则使用 PHP 的`preg_match`函数。 指定的模式应遵循`preg_match`所需的相同格式,也包括有效的分隔符。 例如:`'email' => 'not_regex:/^.+$/i'`。 \*\*注意:\*\*当使用`regex`/`not_regex`模式时, 可能需要在数组中指定规则,而不是使用`|`分隔符 ,特别是在正则表达式包含`|`字符 的情况下。 #### required 验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」: * 值为`null`。 * 值为空字符串。 * 值为空数组或空`Countable`对象。 * 值为无路径的上传文件。 #### required\_if:*anotherfield*,*value*,… 如果其它字段`_anotherfield_`为任一值(`_value1_`或`_value2_`或`_value3_`等,也可只有一个`_value1_`) ,则此验证字段必须存在且不为空。 如果您需要构造更复杂的条件`required_if`规则, 您可以使用`Rule::requiredIf`方法。这个方法可以接受一个布尔值或是一个闭包函数,当传递闭包函数时,闭包函数应该返回`true`或`false`,以表明是否需要验证此字段: ~~~php use Illuminate\Validation\Rule; Validator::make($request->all(), [ 'role_id' => Rule::requiredIf($request->user()->is_admin), ]); Validator::make($request->all(), [ 'role_id' => Rule::requiredIf(function () use ($request) { return $request->user()->is_admin; }), ]); ~~~ #### 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 对应给定的整数值(attribute 必须有`numeric`或者`integer`规则)。对于数组,size 对应数组的`count`值。对于文件,size 对应文件大小(单位 kB)。让我们来看几个例子: ~~~php // 验证字符串长度是否为 12... 'title' => 'size:12'; // 验证数字是否为 10... 'seats' => 'integer|size:10'; // 验证数组的长度(拥有的元素)是否为 5... 'tags' => 'array|size:5'; // 验证上传的文件是否为 512 kB... 'image' => 'file|size:512'; ~~~ #### starts\_with:*foo*,*bar*,… 验证字段必须以给定值之一开头。 #### string 验证字段必须是一个字符串。如果允许这个字段为`null`,需要给这个字段分配`nullable`规则。 #### timezone 验证字段必须为符合 PHP 函数`timezone_identifiers_list`所定义的有效时区标识。 #### unique:*table*,*column*,*except*,*idColumn* 验证字段在给定的数据库表中必须是唯一的。 **指定自定义数据表 / 列名:** 除直接指定表名外,你也可以指定 Eloquent 模型。 ~~~php 'email' => 'unique:App\Models\User,email_address' ~~~ `column`选项可用于指定相应数据库列的字段。 如果未指定`column`选项,则使用字段本身名称。 ~~~php 'email' => 'unique:users,email_address' ~~~ **自定义数据库连接** 有时,你可能需要为验证器创建的数据库查询设置自定义连接。上面的例子中,将`unique:users`设置为验证规则,等于使用默认数据库连接来查询数据库。如果要对其进行修改,请使用「点」语法来指定连接和表名: ~~~php 'email' => 'unique:connection.users,email_address' ~~~ **强制 Unique 规则忽略指定 ID:** 有时,你可能希望在进行字段唯一性验证时忽略指定 ID 。例如, 在「更新个人资料」页面会包含用户名、邮箱和地点。这时你会想要验证更新的 E-mail 值是否唯一。如果用户仅更改了用户名字段而没有改 E-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 E-mail 的拥有者了。 使用`Rule`类定义规则来指示验证器忽略用户的 ID 。这个例子中通过数组来指定验证规则,而不是使用`|`字符来分隔: ~~~php use Illuminate\Validation\Rule; Validator::make($data, [ 'email' => [ 'required', Rule::unique('users')->ignore($user->id), ], ]); ~~~ > 注意:您永远不应该将任何用户控制的请求输入传递给`ignore`方法。您应该只通过`Eloquent`模型的实例来传递系统生成的唯一 ID,例如自动递增 ID 或 UUID 。否则,您的应用程序将更容易受到 SQL 注入攻击。 您可以传递整个模型实例,而不是将模型实例的主键值 传递给`ignore`方法。 Laravel 将自动从模型实例中获取主键值: ~~~php Rule::unique('users')->ignore($user) ~~~ 如果您的数据表使用的主键名称不是`id`,那就在调用`ignore`方法时指定字段的名称: ~~~php Rule::unique('users')->ignore($user->id, 'user_id') ~~~ 默认情况下,`unique`规则将检查与要验证字段名称相匹配的列的唯一性。 但是,您可以传递一个不同的列名作为`unique`方法的第二个参数: ~~~php Rule::unique('users', 'email_address')->ignore($user->id), ~~~ **增加额外的 Where 语句:** 您也可以通过`where`方法指定额外的查询条件。例如, 我们添加`account_id`为`1`的约束: ~~~php 'email' => Rule::unique('users')->where(function ($query) { return $query->where('account_id', 1); }) ~~~ #### url 验证的字段必须是有效的 URL。 #### uuid 验证字段必须是有效的 RFC 4122(版本 1,3,4 或 5)通用唯一标识符(UUID)。