Zend_Validate_Date在2011-02-31返回true

时间:2012-01-19 05:57:05

标签: zend-framework

我该怎么办?

$edit_end_date  = '2011-02-31';
$validator_date = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd'));  
$isval          =   $validator_date->isValid($edit_end_date);  
if((!$isval) || empty($edit_end_date))
    {
    echo "Please Enter Valid End Date. !";
    }else{
echo "Entered Is Valid End Date. !";
}

为什么它会返回真实日期?

2 个答案:

答案 0 :(得分:1)

根据Zend API Docs,Zend_Validate_Date似乎只验证传递给它的参数是否是有效的日期构造(也考虑了语言环境),它不会验证日期是否实际存在。

Zend_Validate_Date允许您验证给定值是否包含日期。此验证器还验证了本地化输入。

- 编辑 -

您似乎可以使用PHP's built in checkdate()函数来确定日期是否有效。

答案 1 :(得分:0)

数据验证存在错误(ZF-7583 at issue tracker)。看Zend_Validate_Date just doesn't work properly

您可以像回答链接问题一样使用正则表达式验证,但它只会检查语法,而不是真实的日期。为此,您可以使用checkdate() - 正如Mike Purcell建议的那样 - 与Zend_Validate_Callback结合使用:

$validator1 = new Zend_Validate_Regex(
    array('pattern' => '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/')
);
$validator1->setMessage(
    "Date does not match the format 'yyyy-mm-dd'",
    Zend_Validate_Regex::NOT_MATCH
);

$validator2 = new Zend_Validate_Callback(function($value)) {
    // using checkdate() or other function
});