Laravel 提供了丰富的验证规则,涵盖常见的数据验证需求。以下是常用的 Laravel 验证规则及其对应的示例,帮助你更好地理解和使用这些规则。
基本验证规则
规则 | 描述 | 示例 |
---|
required | 必须存在字段。 | 'name' => 'required' |
nullable | 字段可以为空,但如果存在必须通过其他验证 | 'name' => 'nullable' |
filled | 字段非空时才进行验证 | 'name' => 'filled' |
present | 字段必须存在,但可以为空 | 'name' => 'present' |
sometimes | 有时需要验证(配合 Validator 使用) | 'name' => 'sometimes' |
字符串和数值规则
规则 | 描述 | 示例 |
---|
string | 必须是字符串 | 'name' => 'string' |
integer | 必须是整数 | 'age' => 'integer' |
numeric | 必须是数值 | 'price' => 'numeric' |
boolean | 必须是布尔值 | 'active' => 'boolean' |
array | 必须是数组 | 'tags' => 'array' |
json | 必须是 JSON 字符串 | 'settings' => 'json' |
digits | 必须是指定长度的数字 | 'pin' => 'digits:4' |
digits_between | 必须是指定范围内的数字长度 | 'phone' => 'digits_between:10,15' |
min | 最小值(数字、字符串、文件或数组) | 'age' => 'min:18' |
max | 最大值(数字、字符串、文件或数组) | 'title' => 'max:255' |
日期和时间规则
规则 | 描述 | 示例 |
---|
date | 必须是有效日期 | 'published_at' => 'date' |
date_format | 必须符合指定格式 | 'date' => 'date_format:Y-m-d' |
before | 必须是指定日期之前 | 'start_date' => 'before:end_date' |
after | 必须是指定日期之后 | 'end_date' => 'after:start_date' |
before_or_equal | 必须是指定日期或之前 | 'start_date' => 'before_or_equal:today' |
after_or_equal | 必须是指定日期或之后 | 'end_date' => 'after_or_equal:start_date' |
文件和图片规则
规则 | 描述 | 示例 |
---|
file | 必须是文件 | 'document' => 'file' |
image | 必须是图片文件(jpeg、png 等) | 'avatar' => 'image' |
mimes | 文件 MIME 类型必须是指定类型 | 'avatar' => 'mimes:jpeg,png' |
mimetypes | 文件 MIME 类型必须是指定 MIME | 'avatar' => 'mimetypes:image/jpeg' |
size | 文件大小(单位:KB) | 'document' => 'size:1024' |
max | 文件最大大小 | 'document' => 'max:2048' |
dimensions | 图片的最小/最大宽度、高度 | 'avatar' => 'dimensions:min_width=100,min_height=200' |
字符串和格式规则
规则 | 描述 | 示例 |
---|
email | 必须是有效的邮箱地址 | 'email' => 'email' |
url | 必须是有效的 URL | 'website' => 'url' |
ip | 必须是有效的 IP 地址 | 'ip_address' => 'ip' |
uuid | 必须是有效的 UUID | 'id' => 'uuid' |
regex | 必须符合正则表达式 | 'username' => 'regex:/^[A-Za-z0-9]+$/' |
alpha | 只能包含字母 | 'name' => 'alpha' |
alpha_dash | 只能包含字母、数字、破折号和下划线 | 'username' => 'alpha_dash' |
alpha_num | 只能包含字母和数字 | 'username' => 'alpha_num' |
比较规则
规则 | 描述 | 示例 |
---|
same | 必须与指定字段的值相同 | 'password_confirmation' => 'same:password' |
different | 必须与指定字段的值不同 | 'old_password' => 'different:new_password' |
gt | 必须大于指定字段的值 | 'age' => 'gt:18' |
gte | 必须大于或等于指定字段的值 | 'quantity' => 'gte:min_quantity' |
lt | 必须小于指定字段的值 | 'age' => 'lt:60' |
lte | 必须小于或等于指定字段的值 | 'quantity' => 'lte:max_quantity' |
in | 值必须在指定的列表中 | 'status' => 'in:pending,approved' |
not_in | 值必须不在指定的列表中 | 'status' => 'not_in:banned' |
数组和 JSON 规则
规则 | 描述 | 示例 |
---|
array | 必须是一个数组 | 'tags' => 'array' |
distinct | 数组的每个元素必须唯一 | 'tags.*' => 'distinct' |
size | 数组必须包含指定数量的元素 | 'tags' => 'size:3' |
min | 数组元素的最小数量 | 'tags' => 'min:1' |
max | 数组元素的最大数量 | 'tags' => 'max:5' |
特定字段条件验证
规则 | 描述 | 示例 |
---|
required_if | 如果指定字段为某值时,字段是必填 | 'reason' => 'required_if:status,rejected' |
required_unless | 如果指定字段不为某值时,字段是必填 | 'reason' => 'required_unless:status,approved' |
required_with | 如果任一指定字段存在,则字段是必填 | 'field' => 'required_with:field1,field2' |
required_with_all | 如果所有指定字段存在,则字段是必填 | 'field' => 'required_with_all:field1,field2' |
required_without | 如果任一指定字段不存在,则字段是必填 | 'field' => 'required_without:field1' |
required_without_all | 如果所有指定字段都不存在,则字段是必填 | 'field' => 'required_without_all:field1,field2' |
数据库验证规则
规则 | 描述 | 示例 |
---|
unique | 必须在数据库中唯一 | 'email' => 'unique:users,email' |
exists | 必须存在于数据库的指定表字段中 | 'user_id' => 'exists:users,id' |
自定义错误消息
你可以在验证中添加自定义错误消息,以便更好地提示用户:
1
2
3
4
5
6
7
| public function messages()
{
return [
'name.required' => '请提供您的姓名。',
'email.unique' => '该邮箱地址已被注册。',
];
}
|
案例示例
以下是一个表单请求验证的综合示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
'
email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8|confirmed',
'age' => 'nullable|integer|gt:0',
'birth_date' => 'nullable|date|before:today',
'profile_image' => 'nullable|image|mimes:jpeg,png|max:1024',
];
}
public function messages()
{
return [
'name.required' => '姓名为必填项。',
'email.unique' => '该邮箱已被注册。',
'password.confirmed' => '两次密码输入不一致。',
'birth_date.before' => '出生日期必须是过去的日期。',
];
}
}
|
通过灵活使用这些规则,你可以更好地掌控数据的验证逻辑,提升应用的安全性和用户体验。