You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.7使用required_if实现邮箱手机号至少填一项不生效问题

问题根因
  • 规则顺序和逻辑冲突:nullable 规则的执行优先级更高,当字段为空时会直接跳过该字段后续的所有验证规则,因此两个字段同时留空时,你写的required_if规则根本不会触发校验。
  • 规则选型错误:required_if 适用于「另一个字段等于指定值时当前字段必填」的场景,不符合你需要的「两个字段至少填一个」的校验逻辑,Laravel内置的required_without规则才是对应场景的正确选型。
修复方案

将验证规则调整为如下写法即可,注意要把required_without放在nullable前面,优先执行必填校验:

'firstName' => 'nullable',
'lastName' => 'nullable',
'email' => ['required_without:phone', 'nullable', 'email'],
'phone' => ['required_without:email', 'nullable'],
可选:自定义错误提示

默认的错误提示会分别提示邮箱/手机号必填,如果你想要更贴合业务的统一提示,可以在验证时传入自定义消息数组:

$rules = [
    // 上述验证规则
];
$messages = [
    'email.required_without' => '邮箱和手机号至少填写一项',
    'phone.required_without' => '邮箱和手机号至少填写一项',
];

$validated = $request->validate($rules, $messages);

内容的提问来源于stack exchange,提问作者OnlyProblems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:21:03