首页 laravel 验证规则大全及案例
文章
取消

laravel 验证规则大全及案例

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' => '出生日期必须是过去的日期。',
        ];
    }
}

通过灵活使用这些规则,你可以更好地掌控数据的验证逻辑,提升应用的安全性和用户体验。

本文由作者按照 CC BY 4.0 进行授权

遇到 PHP-FPM 进程占用 CPU 高达 100% 的情况时如何排查

小程序和H5之间互相跳转实现方法