[Moscow.pm] Date Validate
Илья
forihrd на gmail.com
Пн Мар 3 01:40:41 PST 2008
никак не могу въехать зачем такой монстр и почему, можно немного
прокомментировать?
например:
([02468][048]|[13579][26])([02468][048]|[13579][26])
или это просто попытко сделать регекспину побольше? тогда как-то не
хватает размаха.
Илья
28.02.08, Vladimir V. Perepelitsa<inthrax на gmail.com> написал(а):
> Есть задачка по написанию регулярного выражения для проверки даты.
> Постепенно \d{4}-\d{2}-\d{2} при помощи канала #Perl трансформировалось в
> нижеследующее. Представлено в развернутом формате (/x) для удобства
> доработки.
>
> Присоединяйтесь, кто хочет к написанию тестовых вариантов и может быть
> какой-то оптимизации.
>
> Ограничение такое, что регулярное выражение должно также выполняться в
> ECMAScript, т.е. использовать perl code-blocks не есть гуд :)
>
> ============
> #!/usr/bin/perl
>
> use strict;
> use Test::More qw(no_plan);
>
> my $test = qr{^
> (
> ([02468][048]|[13579][26])([02468][048]|[13579][26])
> -
> (
> (0[13578]|1[02])
> -
> ([012]\d|3[01])
> |
> (0[469]|11)
> -
> ([012]\d|30)
> |
> 02-[012]\d
> )
> |
> (
> \d\d([02468][^048]|[13579][^26])
> |
> ([02468][^048]|[13579][^26]00)
> )
> -
> (
> (0[13578]|1[02])
> -
> ([012]\d|3[01])
> |
> (0[469]|11)
> -
> ([012]\d|30)
> |
> 02
> -
> ([01]\d|2[0-8])
> )
> )
> $}x;
>
> like ($_,$test,$_) for
> qw( 1900-02-28 2000-02-28 ),
> ( map { "2001-$_" } '02-28',
> ( map { "$_-31" } qw(01 03 05 07 08 10 12) ),
> ( map { "$_-30"} qw(04 06 09 11) ) ),
> ( map { "2000-$_" } '02-29',
> ( map { "$_-31" } qw(01 03 05 07 08 10 12) ),
> ( map { "$_-30"} qw(04 06 09 11) ) ),
> ;
>
> unlike ($_,$test,$_) for
> qw( 123-01-01 0000-00-00 ),
> qw( 1900-02-29 2001-02-29 1900-02-30 2000-02-30 2001-02-30 2001-01-32),
> ;
>
>
>
> --
> Vladimir Perepelitsa aka Mons Anderson
> <inthrax на gmail.com> / #99779956
> ______________________________________________________________________
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm
Подробная информация о списке рассылки Moscow-pm