日期验证不适用于日期格式'd-M-Y'

时间:2012-03-09 07:40:40

标签: cakephp date-format cakephp-1.2

在我的CakePHP-1.2应用程序中,我使用的是日期格式01-Jan-2012

我应该使用哪个日期验证规则进行测试?

我尝试过数组('date','dMy')。但它没有用。

1 个答案:

答案 0 :(得分:3)

通过阅读本书,您可以看到您无法在所选算法的日期验证字段中使用分隔符。您需要创建自定义验证规则。您可以使用自定义正则表达式规则执行此操作:

'/^((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匹配。这将与2006年12月24日,2006年12月24日和2006年12月24日相同。如果您想接受区分大小写的匹配,请将其删除。

现在,你可以简单地针对相关领域运行该规则,你应该好好去。

祝你好运。