[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