les*_*san 3 laravel laravel-5 laravel-validation
'person.mail' =>'required_without:person.phone|sometimes|email|unique:persons,mail',
'person.phone' => 'required_without:person.mail|sometimes|regex:/[0-9]/|size:10|unique:persons,phone'
Run Code Online (Sandbox Code Playgroud)
我需要验证电话和邮件,其中之一是强制性的
当邮件为空而电话为空时,验证将在电子邮件规则处失败,并且双向进行,当邮件存在且电话为空时,则在正则表达式规则处失败
如果值为null,如何停止验证?
在某些情况下,仅当输入数组中存在该字段时,您才可能希望对该字段运行验证检查。要快速完成此操作,请将有时是规则添加到规则列表中。
我感觉到您实际上确实同时发布了person[email]and person[phone],在这种情况下sometimes将指示继续验证,因为值将是空字符串(或可能是空字符串null),而不是不存在。您可以有条件地在其他断言上添加规则,而不是通过创建自己的验证器来检查键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');
});
Run Code Online (Sandbox Code Playgroud)
此处的区别在于,默认情况下不需要这些字段。因此,例如,person.phone可能为空,或者必须与您的正则表达式匹配。如果$input->get('person.email')返回假值,person.phone则毕竟是必需的。
请注意,我认为您的正则表达式是错误的。只要其中的任何字符person.phone都是数字,它就会通过。我认为您正在寻找这样的东西:
'person.phone' => 'regex:/^[0-9]{10}$/|unique:persons,phone'
Run Code Online (Sandbox Code Playgroud)