我该怎么办?
$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. !";
}
为什么它会返回真实日期?
答案 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
});