FormValidator::Simple::Plugin::FormatDateTimeとかどうかな

FormValidator::Simple使って日付のチェックする時に標準のやつはリストしか対応してないっぽい。
日付文字列からその日付のチェックを行うようなプラグイン無いかなーと思ってCPAN見てたんだけどそれらしきものがないようだ(多分)。

というわけでそれらしきものを考えてみました。

ソースはこんな感じで、

 package FormValidator::Simple::Plugin::FormatDateTime;
 use strict;
 use warnings;
 use DateTime::Format::Strptime;
 use FormValidator::Simple::Exception;
 use FormValidator::Simple::Constants;
 our $VERSION = 1.01;
 
 sub FORMAT_DATETIME {
     my $class     = shift;
     my $date      = shift->[0];
     my $formatter = shift->[0] || '%Y/%m/%d %H:%M:%S';
     
     my $strp = eval { DateTime::Format::Strptime->new( pattern => $formatter ) };
     if($@){
         FormValidator::Simple::Exception->throw(qq/Validation FORMAT_DATETIME: $@/);
     }
     
     return FALSE unless defined $date;
     return defined $strp->parse_datetime($date) ? TRUE : FALSE;
 }

で使い方はこんな感じ

 use CGI;
 use FormValidator::Simple qw(FormatDateTime);
 
 my $query = CGI->new;
 $query->param( param1 => '2004/12/33' );
 
 my $result = FormValidator::Simple->check( $query => [
     param1 => [['FORMAT_DATETIME','%Y/%m/%d']],
 ] );
 
 if( $result->has_error ) { }

さあCPANに上げるぜこのやろう!ようにも英語とかできないしムリポ