我在请求中有以下规则:
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字段,我只希望在regex检查返回true时运行valid_date规则。如果regex检查返回false,那么valid_date检查就没有意义了如果值中没有/,那么当它试图在/
上爆炸时就会出错是否有一种方法可以有条件地添加规则,如果另一个规则是有效的?
你可以使用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;
});
如果apply_regex($input->dob)
为true,则触发 valid_date
。注意,apply_regex
如果您的自定义函数计算dob
你可以试试保释规则,
'dob' => 'bail|required|regex:/[0-9]{2}'/[0-9]{2}'/[0-9]{4}/|valid_date',