[英]How to create a datetime validator in a Zend Framework form?
默认情况下,Zend Framework日期验证程序使用日期格式yyyy-MM-dd
:
$dateValidator = new Zend_Validate_Date();
但我想添加小时和分钟验证。 换句话说,我想要求用户输入小时和分钟。 但以下不起作用:
$dateValidator = new Zend_Validate_Date('yyyy-MM-dd hh:ii');
如果我输入2010-02-01
,则会收到错误消息,指出日期不符合格式。 如果我输入2010-02-01 3
,它不会抱怨。 它正在做的是假设用户意味着2010-02-01 03:00
而不是强制用户以给定格式输入日期。
如何强制必须以给定格式输入日期?
请参阅: http : //framework.zend.com/issues/browse/ZF-6369
基本上它归结为格式验证的底层代码无法正常工作。 它不会使用严格的验证,而是会尝试将提供的日期强制转换为可验证的内容,从而获得手帕效果。
它确实看起来已被标记为'Major',所以希望我们很快就能看到修复。
为了增加诺亚的答案, Zend_Validate_Date
非常糟糕Zend_Validate_Date
灵活; 也就是说,如果你想要一个更宽容的日期条目政策。
现在,如果ZF附带了一个Zend_Filter_Date
,它可以规范各种琐碎(虽然非常易于解析)格式的日期选择器/用户输入供应,这可能是一个不同的故事,因为您可以将日期过滤为标准化格式,然后验证它是以那种格式。 但事实并非如此。
不过,无论如何,这个问题都有很多理智的解决方案。 可能最简单的是:
$validator = new \Zend_Validate_Callback(function($value) {
return (bool)strtotime($value);
});
就个人而言,我不关心日期/日期是否以yyyy / MM / dd,2012年9月23日或“-2周”的形式出现 - 我真正关心的是strtotime是否足够智能解析它。
斯蒂芬回答+1。 我找了一个类似的解决方案,因为我已经知道我必须验证的格式:
$validator = new \Zend_Validate_Callback(function($value) {
return (bool) date_create_from_format('Y-m-d H:i', $value);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.