我在Laravel(4.2)
中验证日期时遇到了问题$input = array('date_field' => '23/12/2');
$validation_rules = array('date_field' => 'required|date_format:d/m/y');
$validation = Validator::make($input, $validation_rules);
echo ($validation->fails()) ? 'fail' : 'pass';
如果样本(虽然不正确)日期通过23/12/2,验证器仍然会返回一个传递,技术上应该是失败。
我基本上试图强制输入字段格式,使其与dd / mm / yy UK日期格式匹配。
谢谢!
答案 0 :(得分:1)
您可以使用regex:
来确保date_format
之外的格式,例如:
$validation_rules = [
'date_field' => [
'required',
'date_format:m/d/y',
'regex:#[0-9]{2}\/[0-9]{2}\/[0-9]{2}#'
]
];
但是'23/12/2'
无效并且应该是失败但却混淆了为什么它通过了!
答案 1 :(得分:0)
您可以在日期中使用规则。您可以指定用户可以输入的最短日期。这样,如果用户在最短日期之后输入日期,则将传递验证结果。
实施例
$input = array('date_field' => '23/12/2');
$minDate = '01/01/67';
$validation_rules = array('date_field' => 'required|date_format:d/m/y|after:' . $minDate);
$validation = Validator::make($input, $validation_rules);
echo ($validation->fails()) ? 'fail' : 'pass';
另一种解决方案是,您必须编写自定义验证,以检查日期或月份用户输入的内容是否超过某些内容。
验证月份的自定义验证示例
Validator::extend('maxMonth', function($field,$value,$parameters){
$value = explode("/", $value);
if($value[1] < 13) {
$value[1] = true;
}
else {
$value[1] = false;
}
return $value[1];
});
Route::get('/date', function()
{
$input = array('date_field' => '33/12/68');
$validation_rules = array('date_field' => 'required|date_format:d/m/y|maxMonth');
$messages = array(
'maxMonth'=>'Please enter month between 01-12'
);
$validation = Validator::make($input, $validation_rules, $messages);
if($validation->passes()){
// Do something if passes
}else{
// Do something if fails
}
});