2012-09-25 68 views
0

我正在使用ZF 1.11並且想用Zend_Filter_Input驗證非Zend_Form。我已經成功地設置了我的基本驗證,但我試圖在將它發送到處理器之前預先驗證信用卡到期日期,以便比今天的月/年更長。使用Zend_Filter_Input驗證日期

這可能嗎?我沒有看到their docs上有任何具體的日期驗證,除了驗證某個範圍內的月份/年份字段爲數字。

編輯:我想在不創建新的驗證類(或擴展/實現現有類)的情況下執行此操作,正如我在其他關於SO的問題中看到的那樣。

+0

可能的重複http://stackoverflow.com/questions/2232949/date-validator-that-validates-if-the-date-is-greater-than-or-equal-to-today-with –

+1

@DiegoPaladino是的,我看到了這個問題,並且相應地編輯了我的內容,因爲我想知道Zend是否具有這樣的內置函數。 –

回答

2

一般來說,我建議編寫一個自定義驗證器,因爲這是我認爲在ZF中處理這種情況的最簡單的方法。

據我所知,日期驗證程序只檢查日期的形式有效性,但不能比較兩個日期。然而,在考慮限制只使用內置的Zend Framework的驗證器我用GREATERTHAN驗證想出了一個有點哈克解決方案:

<?php 
$year = 2012; 
$month = 1; 
$inputDatePast = intval(sprintf('%4d%02d', $year, $month)); //201201 

$year = 2016; // if you read this after september 2016: add a few more years here ;) 
$month = 9; 
$inputDateFuture = intval(sprintf('%4d%02d', $year, $month)); //201609 

$prevMonth = intval(date('Ym', mktime(12, 0, 0, date('n')-1, 1, date('Y')))); 

$validator = new Zend_Validate_GreaterThan($prevMonth); 
$validator->isValid($inputDatePast); // false 
$validator->isValid($inputDateFuture); // true 
?> 

這樣的想法是創造出來前一個月的一年的整數,月,並比較給定的年份和月份是否大於此值。該整數由年份的四位數字和該月份的兩位數字(前導零很重要)創建。

作爲一個例子,2012年9月是201209.如果用戶輸入2011年10月,這將是201109,小於201209,因此評估爲假。另一方面,如果用戶輸入2014年1月,這將是201401,大於前一日期。

請注意,這只是一個未經測試的草圖,可能需要更多的考慮和驗證。

+0

我明白了。編寫自定義驗證器似乎更容易,所以我想我必須這樣做。雖然謝謝! –