如果 Laravel 中的值不为空,如何验证输入字段

Posted

技术标签:

【中文标题】如果 Laravel 中的值不为空,如何验证输入字段【英文标题】:How to validate an input field if value is not null in Laravel 【发布时间】:2017-08-22 10:55:05 【问题描述】:

我正在尝试使用 laravel 5.4 创建和更新用户

这是为创建用户添加的验证。它有效。

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

更新时不需要密码字段。但如果密码字段不为空,请验证 min:6 并确认规则。尝试使用sometimes.. 但无法正常工作..

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users,email,'.$id,
    'password' => 'sometimes|min:6|confirmed',
]);

【问题讨论】:

如果您有 2 个单独的创建和更新函数,您可以从更新中删除密码验证规则 【参考方案1】:

尝试使用 nullable 作为规则

'password' => 'nullable|min:6|confirmed',

见https://laravel.com/docs/5.8/validation#a-note-on-optional-fields

【讨论】:

【参考方案2】:

我会这样做:

//For new or create :
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

//For edit or update:
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'min:6|confirmed',//just remove required from password rule
]);

说明: 这样,只有在请求中定义(存在)时才会验证值 如果您使用 nullable,验证器将接受 null 作为值(我认为这是不可接受的) 如果您从更新中删除 password 验证,则此输入将根本不会被验证,并且 任何值 都将被接受(这也是不可接受的);

【讨论】:

回答前请仔细阅读问题。【参考方案3】:

如果列可以为空

'password' => 'nullable|min:6|confirmed',

@Rejinderi 的回答是正确的!

如果列不可为空(这可能对其他人有帮助)

'password' => 'sometimes|required|min:6|confirmed',

结果

username = 'admin',
password = null // fail- required

username = 'admin',
password = 123 // fail- min:6

username = 'admin' // pass- validate only exist

【讨论】:

以上是关于如果 Laravel 中的值不为空,如何验证输入字段的主要内容,如果未能解决你的问题,请参考以下文章

如果值不为空,如何仅在对象中添加字段? Javascript

MySQL中查询一个字符串字段的值不为空到底该怎么写?

如果上一列值不为空,则更新表中的下一列

mongo 查询某个字段的值不为空列表!

如何在mysql中获取值不为null的列名

Oracle中的NVL,NVL2,NULLIF,COALESCE函数