如果另一个在Laravel 5中通过,如何只运行验证规则

时间:2015-05-18 08:59:41

标签: php laravel laravel-5

我在请求中有以下规则:

Validator::extend('valid_date', function($attribute, $value, $parameters)
{
    $pieces = explode('/', $value);

    if(checkdate($pieces[1], $pieces[0], $pieces[2])) {
        return true;
    } else {
        return false;
    }
});

return [
    'first_name' => 'required',
    'last_name' => 'required',
    'email' => 'required|email|unique:users,email',
    'dob' => 'required|regex:/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/|valid_date',
    'mobile' => 'required',
    'password' => 'required|confirmed'
];

对于dob字段,我只希望在正则表达式检查返回true时运行valid_date规则。如果正则表达式检查返回false,则无法执行valid_date检查,如果值中没有/存在,那么当它试图在/

上爆炸时它将会出错

如果另一条规则有效,有没有办法有条件地添加规则?

2 个答案:

答案 0 :(得分:1)

您可以使用sometimes()方法。

$v = Validator::make($data, [
    'first_name' => 'required',
    'last_name' => 'required',
    'email' => 'required|email|unique:users,email',
    'dob' => 'required|regex:/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/',
    'mobile' => 'required',
    'password' => 'required|confirmed'
]);

$v->sometimes('dob', 'valid_date', function($input)
{
    return apply_regex($input->dob) === true;
});
如果valid_date为真,则会触发

apply_regex($input->dob)。请注意,apply_regex如果您的自定义函数评估dob

的值

答案 1 :(得分:0)

你可以尝试保释规则,

'dob' => 'bail|required|regex:/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/|valid_date',