作为laravel docs 状态:
在某些情况下,您可能希望针对
仅当该字段存在于输入数组中时。要快速
完成此操作,将有时规则添加到您的规则列表中。
我感觉你确实同时发布了person[email] 和person[phone],在这种情况下sometimes 将指示验证继续进行,因为这些值将是空字符串(或者可能是null)而不是不存在。除了检查 key x 是否存在之外,您可以有条件地为其他断言添加规则,方法是创建自己的验证器,并使用其sometimes() 方法创建自己的断言:
$v = Validator::make($data, [
'person.email' => 'email|unique:persons,mail',
'person.phone' => 'regex:/[0-9]/|size:10|unique:persons,phone',
]);
$v->sometimes('person.email', 'required', function($input) {
return ! $input->get('person.phone');
});
$v->sometimes('person.phone', 'required', function($input) {
return ! $input->get('person.email');
});
这里的区别在于这些字段默认情况下不是必需的。例如,person.phone 可能为空,或者必须与您的正则表达式匹配。如果$input->get('person.email') 返回一个falsy 值,那么毕竟person.phone 是必需的。
作为说明,我认为您的正则表达式是错误的。只要person.phone 中的任何字符是数字,它就会通过。我认为您正在寻找这样的东西:
'person.phone' => 'regex:/^[0-9]{10}$/|unique:persons,phone'