簡體   English   中英

如何在Zend Framework表單中創建日期時間驗證器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM