多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 可用的验证规则 以下是所有可用的验证规则清单与功能: * [Accepted](https://learnku.com/docs/lumen/5.1/validation/1852#rule-accepted) * [Active URL](https://learnku.com/docs/lumen/5.1/validation/1852#rule-active-url) * [After (Date)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-after) * [Alpha](https://learnku.com/docs/lumen/5.1/validation/1852#rule-alpha) * [Alpha Dash](https://learnku.com/docs/lumen/5.1/validation/1852#rule-alpha-dash) * [Alpha Numeric](https://learnku.com/docs/lumen/5.1/validation/1852#rule-alpha-num) * [Array](https://learnku.com/docs/lumen/5.1/validation/1852#rule-array) * [Before (Date)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-before) * [Between](https://learnku.com/docs/lumen/5.1/validation/1852#rule-between) * [Boolean](https://learnku.com/docs/lumen/5.1/validation/1852#rule-boolean) * [Confirmed](https://learnku.com/docs/lumen/5.1/validation/1852#rule-confirmed) * [Date](https://learnku.com/docs/lumen/5.1/validation/1852#rule-date) * [Date Format](https://learnku.com/docs/lumen/5.1/validation/1852#rule-date-format) * [Different](https://learnku.com/docs/lumen/5.1/validation/1852#rule-different) * [Digits](https://learnku.com/docs/lumen/5.1/validation/1852#rule-digits) * [Digits Between](https://learnku.com/docs/lumen/5.1/validation/1852#rule-digits-between) * [E-Mail](https://learnku.com/docs/lumen/5.1/validation/1852#rule-email) * [Exists (Database)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-exists) * [Image (File)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-image) * [In](https://learnku.com/docs/lumen/5.1/validation/1852#rule-in) * [Integer](https://learnku.com/docs/lumen/5.1/validation/1852#rule-integer) * [IP Address](https://learnku.com/docs/lumen/5.1/validation/1852#rule-ip) * [Max](https://learnku.com/docs/lumen/5.1/validation/1852#rule-max) * [MIME Types (File)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-mimes) * [Min](https://learnku.com/docs/lumen/5.1/validation/1852#rule-min) * [Not In](https://learnku.com/docs/lumen/5.1/validation/1852#rule-not-in) * [Numeric](https://learnku.com/docs/lumen/5.1/validation/1852#rule-numeric) * [Regular Expression](https://learnku.com/docs/lumen/5.1/validation/1852#rule-regex) * [Required](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required) * [Required If](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required-if) * [Required With](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required-with) * [Required With All](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required-with-all) * [Required Without](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required-without) * [Required Without All](https://learnku.com/docs/lumen/5.1/validation/1852#rule-required-without-all) * [Same](https://learnku.com/docs/lumen/5.1/validation/1852#rule-same) * [Size](https://learnku.com/docs/lumen/5.1/validation/1852#rule-size) * [String](https://learnku.com/docs/lumen/5.1/validation/1852#rule-string) * [Timezone](https://learnku.com/docs/lumen/5.1/validation/1852#rule-timezone) * [Unique (Database)](https://learnku.com/docs/lumen/5.1/validation/1852#rule-unique) * [URL](https://learnku.com/docs/lumen/5.1/validation/1852#rule-url) #### accepted 验证字段值是否为*yes*、*on*、*1*、或*true*。这在确认「服务条款」是否同意时相当有用。 #### active\_url 验证字段值是否为一个有效的网址,会通过 PHP 的`checkdnsrr`函数来验证。 #### after:*date* 验证字段是否是在指定日期之后。这个日期将会通过`strtotime`函数来验证。 ~~~php 'start_date' => 'required|date|after:tomorrow' ~~~ 作为替换`strtotime`传递的日期字符串,你可以指定其它的字段来比较日期: ~~~php 'finish_date' => 'required|date|after:start_date' ~~~ #### alpha 验证字段值是否仅包含字母字符。 #### alpha\_dash 验证字段值是否仅包含字母、数字、破折号( - )以及下划线( \_ )。 #### alpha\_num 验证字段值是否仅包含字母、数字。 #### array 验证字段必须是一个 PHP`array`。 #### before:*date* 验证字段是否是在指定日期之前。这个日期将会使用 PHP`strtotime`函数来验证。 #### between:*min*,*max* 验证字段值的大小是否介于指定的*min*和*max*之间。字符串、数值或是文件大小的计算方式和[`size`](https://learnku.com/docs/lumen/5.1/validation/1852#rule-size)规则相同。 #### boolean 验证字段值是否能够转换为布尔值。可接受的参数为`true`、`false`、`1`、`0`、`"1"`以及`"0"`。 #### confirmed 验证字段值必须和`foo_confirmation`的字段值一致。例如,如果要验证的字段是`password`,就必须和输入数据里的`password_confirmation`的值保持一致。 #### date 验证字段值是否为有效日期,会根据 PHP 的`strtotime`函数来做验证。 #### date\_format:*format* 验证字段值符合定义的日期*格式*,通过 PHP 的`date_parse_from_format`函数来验证。 #### different:*field* 验证字段值是否和指定\_字段( field )\_不同。 #### digits:*value* 验证字段值是否为*numeric*且长度为*value*。 #### digits\_between:*min*,*max* 验证字段值的长度是否在*min*和*max*之间。 #### email 验证字段值是否符合 e-mail 格式。 #### exists:*table*,*column* 验证字段值是否存在指定的数据表中。 #### Exists 规则的基本使用方法 ~~~php 'state' => 'exists:states' ~~~ #### 指定一个特定的字段名称 ~~~php 'state' => 'exists:states,abbreviation' ~~~ 也可以指定更多的条件,它们会被加到「where」查询语句中: ~~~php 'email' => 'exists:staff,email,account_id,1' ~~~ 你也可以传递`NULL`或`NOT_NULL`至「where」语句: ~~~php 'email' => 'exists:staff,email,deleted_at,NULL' 'email' => 'exists:staff,email,deleted_at,NOT_NULL' ~~~ #### image 验证字段文件必须为图片格式( jpeg、png、bmp、gif、 或 svg )。 #### in:*foo*,*bar*,... 验证字段值是否有在指定的列表里面。 #### integer 验证字段值是否是整数。 #### ip 验证字段值是否符合 IP address 的格式。 #### json 验证字段是否是一个有效的 JSON 字符串。 #### max:*value* 字段值必须小于或等于*value*。字符串、数值或是文件大小的计算方式和[`size`](https://learnku.com/docs/lumen/5.1/validation/1852#rule-size)规则相同。 #### mimes:*foo*,*bar*,... 验证字段文件的 MIME 类型是否符合列表中指定的格式。 #### MIME 规则基本用法 ~~~php 'photo' => 'mimes:jpeg,bmp,png' ~~~ 即使你可能只需要验证指定扩展名,但此规则实际上会验证文件的 MIME 类型,其通过读取文件的内容以猜测它的 MIME 类型。 完整的 MIME 类型及对应的扩展名列表可以在下方链接找到:[svn.apache.org/repos/asf/httpd/http...](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) #### min:*value* 字段值必须大于或等于*value*。字符串、数值或是文件大小的计算方式和[`size`](https://learnku.com/docs/lumen/5.1/validation/1852#rule-size)规则相同。 #### not\_in:*foo*,*bar*,... 验证字段值是否不在指定的列表里。 #### numeric 验证字段值是否为数值。 #### regex:*pattern* 验证字段值是否符合指定的正则表达式。 \*\*注意:\*\*当使用`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 验证字段值的类型是否为字符串。 #### timezone 验证字段值是否是有效的时区,会根据 PHP 的`timezone_identifiers_list`函数来判断。 #### unique:*table*,*column*,*except*,*idColumn* 在指定的数据表中,验证字段必须是唯一的。如果没有指定`column`,将会使用字段本身的名称。 **指定一个特定的字段名称:** ~~~php 'email' => 'unique:users,email_address' ~~~ **自定义数据库连接** 有时候你可能需要自定义一个连接,来通过 Validator 对数据库进行查找。如上面所示,设置`unique:users`作为验证规则,通过默认数据库连接来做数据库查找。如果要重写验证规则,可在指定的连接的表单名称后面加上「.」: ~~~php 'email' => 'unique:connection.users,email_address' ~~~ **强迫 Unique 规则忽略指定 ID:** 有时候,你希望在验证字段时对指定 ID 进行忽略。例如,在「更新个人资料」页面会包含用户名、邮箱等字段。这时你会想要验证更新的 e-mail 值是否为唯一的。如果用户仅更改了名称字段而不是 e-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 e-mail 的拥有者了。假设用户提供的 e-mail 已经被其他用户使用,则需要抛出验证错误。若要用指定规则来忽略用户 ID,则应该把要发送的 ID 当作第三个参数: ~~~php 'email' => 'unique:users,email_address,'.$user->id ~~~ 如果你的数据表使用的主键名称不是`id`,那么你可以在第四个参数中来指定它: ~~~php 'email' => 'unique:users,email_address,'.$user->id.',user_id' ~~~ **增加额外的 Where 语句:** 你也可以指定更多的条件到「where」查询语句: ~~~php 'email' => 'unique:users,email_address,NULL,id,account_id,1' ~~~ 上述规则中,只有`account_id`为`1`的数据列会被包含在 unique 规则的验证。 #### url 根据 PHP 的`filter_var`函数来验证字段是否符合 URL 格式。 ## 按条件增加规则 在某些情况下,你可能**只想**在输入数据中有此字段时才进行验证。可通过增加`sometimes`规则到规则列表来实现: ~~~php $v = Validator::make($data, [ 'email' => 'sometimes|required|email', ]); ~~~ 在上面的例子中,`email`字段的验证只会在`$data`数组有此字段时才会进行。 #### 复杂的条件验证 有时候你可能希望增加更复杂的验证条件,例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段有值时,另外两个字段要拥有符合的特定值。增加这样的验证条件并不难。首先,利用你熟悉的*static rules*来创建一个`Validator`实例: ~~~php $v = Validator::make($data, [ 'email' => 'required|email', 'games' => 'required|numeric', ]); ~~~ 假设我们有一个专为游戏收藏家所设计的网页应用程序。如果游戏收藏家收藏超过一百款游戏,我们会希望他们来说明下为什么他们会拥有这么多游戏。比如说他们有可能经营了一家二手游戏商店,或者只是为了享受收集的乐趣。为了在特定条件下加入此验证需求,可以在`Validator`实例中使用`sometimes`方法。 ~~~php $v->sometimes('reason', 'required|max:500', function($input) { return $input->games >= 100; }); ~~~ 传入`sometimes`方法的第一个参数是我们要用条件认证的字段名称。第二个参数是我们想使用的验证规则。`闭包`作为第三个参数传入,如果其返回`true`,则额外的规则就会被加入。这个方法可以轻松的创建复杂的条件式验证。你甚至可以一次对多个字段增加条件式验证: ~~~php $v->sometimes(['reason', 'cost'], 'required', function($input) { return $input->games >= 100; }); ~~~ > \*\*注意:\*\*传入`闭包`的`$input`参数是`Illuminate\Support\Fluent`实例,可用来访问你的输入或文件对象。