2009-08-11 4 views
-3

Связанные/Возможный дубликат: How can I validate dates in Perl?Как проверить дату в формате ГГГГ-ММ-ДД на Perl?

Я создал сценарий, где начальная и конечная дата должна быть задана пользователем во время выполнения сценария. Формат даты, введенный пользователем, должен быть только в формате YYYY-MM-DD.

start_date = $ARGV[0]; 
end_date = $ARGV[1]; 

сообщите пожалуйста.

ответ

1

Предполагая, что вы имеете в виду

$start_date = $ARGV[0]; 
$end_date = $ARGV[1]; 

т.е. синтаксически правильный код Perl, то вы могли бы сделать что-то вроде

die "Please enter dates in YYYY-MM-DD format\n" 
    unless $start_date =~ /^\d{4}-\d\d-\d\d$/; 
die "Please enter dates in YYYY-MM-DD format\n" 
    unless $end_date =~ /^\d{4}-\d\d-\d\d$/; 
2

Во-первых,

my ($start_date, $end_date) = @ARGV; 

тоже работает.

if ($var =~ /^(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})$/) { 
    # see %+ in perldoc perlvar 

Теперь вы должны убедиться, что значения действительны годами, месяцами и днями.

+0

Следует отметить, что для названных захватов требуется Perl 5.10 и (возможно) предоставить резервную копию для более старых версий. –

5

Как уже отмечалось другими, это может быть сделано с regular expressions. Однако, если вы хотите быстро реализовать полное и надежное решение, CPAN - ваш друг.

This TechRepublic article содержит хорошее сравнение даты & Временные модули на CPAN.

Для вашего конкретного использования, вы должны рассмотреть Time::Normalize. См. Раздел документации Diagnostics.

См. Также How can I validate dates in Perl? на SO.