Проверка даты не работает для формата даты 'd-M-Y' - PullRequest
1 голос
/ 09 марта 2012

В моем приложении CakePHP-1.2 я использую формат даты 01-Янв-2012

Какое правило проверки даты мне следует использовать для его проверки?

Я пробовал массив ('date',' dMy ').Но это не работает.

1 Ответ

3 голосов
/ 28 марта 2012

Читая книгу, вы видите, что вы не можете использовать разделители в поле проверки даты для выбранного вами алгоритма. Вам нужно будет создать собственное правило проверки. Это можно сделать с помощью правила пользовательского регулярного выражения:

'/^((31(?!\\ (Feb(ruary)?|Apr(il)?|June?|(Sep(?=\\b|t)t?|Nov)(ember)?)))|((30|29)(?!\\ Feb(ruary)?))|(29(?=\\ Feb(ruary)?\\ (((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\\d|2[0-8])\\-(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\\b|t)t?|Nov|Dec)(ember)?)\\-((1[6-9]|[2-9]\\d)\\d{2})$/';

Примечание: это правило является модифицированной версией консервированных, с которыми поставляется торт.

Итак, вы хотели бы сделать:

var $validate = array(
    'born' => array(
        'rule' => '/^((31(?!\\ (Feb(ruary)?|Apr(il)?|June?|(Sep(?=\\b|t)t?|Nov)(ember)?)))|((30|29)(?!\\ Feb(ruary)?))|(29(?=\\ Feb(ruary)?\\ (((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\\d|2[0-8])\\-(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\\b|t)t?|Nov|Dec)(ember)?)\\-((1[6-9]|[2-9]\\d)\\d{2})$/i', 
        'message' => 'Enter a valid date in Day-Mon-Year format.'
    )
);

Примечание: 'i' в конце регулярного выражения, это просто означает, что это совпадение Case Insensitive. Это будет соответствовать 24 декабря 2006 года, 24 декабря 2006 года и 24 декабря 2006 года. Удалите его, если хотите принять регистр с учетом регистра.

Теперь вы можете просто запустить это правило в отношении рассматриваемого поля, и вам следует идти вперед.

Удачи.

...