Laravel 验证必须填写两个字段之一

我有两个领域:

QQ

电子邮件

如何设置 Validator 对象,以便必须填充其中一个字段?选哪个不重要。


$messages = array(
'email.required_without:qq' => Lang::get('messages.mustenteremail'),
'email.email' => Lang::get('messages.emailinvalid'),
'qq.required_without:email' => Lang::get('messages.mustenterqq'),
);
44563 次浏览

required_without 应该可以工作。

这意味着,如果不存在另一个字段,则该字段是必需的。如果有两个以上的字段,并且只需要一个字段,则使用 required_without_all:foo,bar,...

$rules = array(
'Email' => 'required_without:QQ',
'QQ' => 'required_without:Email',
);

在上面的例子中(由 lucasgeiter 给出) ,你实际上只需要其中一个条件,而不是两个。

$rules = array(
'Email' => 'required_without:QQ'
);

如果您有这两个规则,那么填写这两个规则都不会导致显示两个错误消息。这样,它将检查至少填充了一个字段,如果两个字段都没有填充,则只显示一条错误消息。

仅支持 Laravel > = 8.32。

两者(手机或电子邮件)同时显示-> 通过一个错误。

两者(手机或电子邮件)不是同时存在的-> 通过一个错误。

允许

只能允许一个参数。

'email'  =>  [ 'prohibited_unless:mobile,null,','required_without:mobile','email', 'max:255', ],
'mobile' =>  [ 'prohibited_unless:email,null','required_without:email', 'digits_between:5,13', 'numeric' ],

编辑: 你也可以结合 required_without:...规则使用 prohibits:emailprohibits:mobile