我正在Perl CGI中创建一个小型报告脚本。我希望在那里有开始/结束日期来过滤报告中的事件。所以现在我想知道如何以一些简单的Perl方式验证输入。
我使用这些字段生成表单的方式是:
print textfield({-name=>'start_date', -value=>$start_date});
print textfield({-name=>'end_date', -value=>$end_date});
然后进入数据库查询。
是否有一种简单的Perl-ish方法来验证这些日期?不仅具有正确数量的字符,因为这通过正则表达式很简单,但是如果用户输入29.02.1999左右,我想报告一些错误。
答案 0 :(得分:1)
我会继续前进,让自己变得疯狂,但我喜欢做的是使用Time::Local,然后将时间翻到纪元时间,然后,当它是一个很好的干净整数时,你可以对你施加任何形式的理智检查。
答案 1 :(得分:1)
对于一般表单验证,您应该使用一个很好的框架,比如D ata::FormValidator,它有一个Data::FormValidator::Constraints::DateTime模块用于日期验证
披露:我是Data :: FormValidator :: Constraints :: DateTime
的作者答案 2 :(得分:0)
答案 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 /