2009-09-30 40 views
2

我正在Perl CGI中創建一個小報告腳本。我想在那裏有開始/結束日期來過濾報告中的事件。所以現在我想知道如何以簡單的Perl方式驗證輸入。如何驗證Perl CGI腳本中的日期?

我生成這些字段的形式方法是:

print textfield({-name=>'start_date', -value=>$start_date}); 
    print textfield({-name=>'end_date', -value=>$end_date}); 

便去到數據庫中查詢。

有沒有一種簡單的Perl-ish方法來驗證這些日期?不僅有正確數量的字符,因爲通過正則表達式足夠簡單,但如果用戶輸入29.02.1999左右,我想報告一些錯誤。

回答

0

FormFu似乎是最近在Perl中處理表單的流行庫。我相信它取代了CGI HTML代碼,但它非常強大。

它包含一串用於驗證常見數據類型的代碼,包括dates

0

您可以使用Time::Local來計算Perl中的日期,該日期可以設置爲接受無效時間並仍然計算正確日期(例如一個月中的第32天)或檢查日期並拒絕無效日期。

1

我會繼續前進並擁有瘋狂,但我喜歡做的是使用Time::Local,並將時間倒回到紀元時間,然後,當它是一個很好的乾淨整數時,您可以施加任何有點理智的檢查你喜歡它。

0

我幾乎總是選擇將這樣的東西轉換成DateTime對象。我使用類似DateTimeX::Easy,以幫助緩解過程:

use DateTimeX::Easy; 

my $start_date = DateTimeX::Easy->new('30th Oct 2009'); 
my $from_date = DateTimeX::Easy->new('today'); 

say $start_date->dmy; 
say $from_date->dmy; 

# => 30-10-2009 
# => 01-10-2009 

唯一需要注意的是,DateTime及其相關模塊的內存有點沉重的是你可能要留意在使用時,它的東西CGI。

/I3az/