如何验证Perl CGI脚本中的日期?

时间:2009-09-30 15:47:24

标签: perl validation date cgi

我正在Perl CGI中创建一个小型报告脚本。我希望在那里有开始/结束日期来过滤报告中的事件。所以现在我想知道如何以一些简单的Perl方式验证输入。

我使用这些字段生成表单的方式是:

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

然后进入数据库查询。

是否有一种简单的Perl-ish方法来验证这些日期?不仅具有正确数量的字符,因为这通过正则表达式很简单,但是如果用户输入29.02.1999左右,我想报告一些错误。

5 个答案:

答案 0 :(得分:1)

我会继续前进,让自己变得疯狂,但我喜欢做的是使用Time::Local,然后将时间翻到纪元时间,然后,当它是一个很好的干净整数时,你可以对你施加任何形式的理智检查。

答案 1 :(得分:1)

对于一般表单验证,您应该使用一个很好的框架,比如D ata::FormValidator,它有一个Data::FormValidator::Constraints::DateTime模块用于日期验证

披露:我是Data :: FormValidator :: Constraints :: DateTime

的作者

答案 2 :(得分:0)

FormFu似乎是最近在Perl中处理表单的流行库。我相信它取代了CGI HTML生成代码,但它非常强大。

它包含一堆用于验证常见数据类型的代码,包括dates

答案 3 :(得分:0)

您可以使用Time::Local计算Perl中的日期,可以将其设置为接受无效时间并仍然计算正确的日期(例如,一个月的第32天)或检查日期并拒绝无效日期。< / p>

答案 4 :(得分: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 /