2015-04-11 3 views
0

У меня возникли проблемы проверяющих дат в Laravel (4,2)Проверяющие даты в 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

Рассматривается ли правильная дата -> 23/12/2 ?? Должна ли цифра года составлять не менее 2 цифр? – Taylor

ответ

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' не является действительным и должно быть, но не удалось спутать, почему он прошел, в любом случае!

+0

Спасибо за это! Добавление правила регулярного выражения гарантирует, что формат даты равен xx/xx/xx. Вам все равно потребуется правило date_format, чтобы вы могли: t ввести 99/99/99, который будет проходить только под регулярным выражением. – Taylor

+0

Фактически 'date_format' * * требуется *, потому что он работает с PHP DateFormat - и будет проверять, что сама дата является * действительной * - т.е. вы не можете иметь 30 февраля и т. д. – Laurence

+0

Спасибо за совет, обновленный. –

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 
    } 
}); 
+0

Спасибо за ваш ответ. Я не уверен, что возможный диапазон дат, поэтому не может указывать minDate. – Taylor

+0

Я уже обновляю свой пост другим решением. Взглянуть – Faiz

Смежные вопросы