2017-08-24 86 views
0
'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' 

我需要验证的电话和邮件的工作,其中之一是强制required_without不与其他规则

当邮件是空的,手机没有,则验证失败的邮件规则,这两种方式,当邮件存在和手机为空时,在正则表达式规则下失败

如果值为空,我该如何停止验证?

回答

1

作为laravel docs状态:

在一些情况下,可能希望对一个 字段运行验证检查仅当该字段是存在于输入阵列英寸要快速 完成此操作,请将有时规则添加到您的规则列表中。

我得到你实际上张贴既person[email]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'); 
}); 

这里的区别在于,字段不默认情况下需要。例如,person.phone可能是空的,或者必须匹配您的正则表达式。如果! $input->get('person.email')返回虚假值,person.phone毕竟是必需的。

作为一个说明,我认为你的正则表达式是错误的。只要person.phone内的任何字符是数字,它就会通过。我认为你在寻找这样的事情:

'person.phone' => 'regex:/^[0-9]{10}$/|unique:persons,phone' 
+0

是的验证后,工作得很好 ,我读了laracasts论坛上的某个地方,有时规则评估空字符串和null为false,谢谢你的回答 – lessan

0

我的工作就围绕这个样子,这不是最好的办法,但我加入

if(empty($request->all()['person']['mail']) && empty($request->all()['person']['phone'])){ 
     $validator->errors()->add('person.mail', 'Mail or phone required'); 
     $validator->errors()->add('person.phone', 'Mail or phone required'); 
     return redirect("admin/people-create")->withInput()->withErrors($validator); 
    } 
相关问题