Регулярные выражения подтверждают даты типа "Солнце, 20 июня, 10" - PullRequest
1 голос
/ 18 июня 2010

Я работаю над регулярным выражением, которое будет возвращать true, только если строка даты имеет формат, например, 'ddd, dd mmm yy'.

Допустимые совпадения - это значения типа "Sun, 2010 июня или понедельник, 21 июня, но не воскресенье, 20 июня, 10 июня или 20 июня.

Это будет использоваться с mb_ereg в PHP.

Мои попыткидо сих пор добрались только на полпути.Любая помощь приветствуется!

Спасибо, Дейв

Ответы [ 3 ]

3 голосов
/ 18 июня 2010
"/[a-z]{3}, \\d{2} [a-z]{3} \\d{2}/i"

Если флаг i (без учета регистра) не поддерживается, замените [a-z] на [a-zA-Z]

Также замените [a-z]{3} на (Sun|Mon|Tue|Wed|Thu|Fri|Sat) и соответствующий (Month|List)более строгая проверка.

1 голос
/ 18 июня 2010

Это одно решение.Дни, такие как «00», не допускаются.

$date = 'Fri, 18 Jun 10';
$regex = '#([A-Za-z]{3}), ((?:0[1-9])|(?:(?:1|2)[0-9])|(?:3(?:0|1))) ([A-Za-z]{3}) ([0-9]{2})#';
preg_match($regex, $date, $matches);

// Create Vars out of the matching...
$day_abbr = $matches[1];
$day = $matches[2];
$month_abbr = $matches[3];
$year = $matches[4];

Если вы хотите разрешить дни без начальных нулей, вам придется использовать это регулярное выражение (только что добавлен вопросительный знак. Это означает, что даты такие как «Солнце, 8 июня 10»"также действительны со следующим регулярным выражением.

$regex = '#([A-Za-z]{3}), ((?:0?[1-9])|(?:(?:1|2)[0-9])|(?:3(?:0|1))) ([A-Za-z]{3}) ([0-9]{2})#';
0 голосов
/ 18 июня 2010

Я не уверен, почему вы предпочитаете ereg, а не preg, но здесь:

$regex = '([A-Z][a-z]{2}), (([012][0-9])|(3[01])|[0-9]) ([A-Z][a-z]{2}) ([0-9]{2})';
mb_ereg($regex, "Sun, 31 Jun 10", $regs);

Конечно, если вы хотите преобразовать время в POSIX, вам нужно сопоставить часть месяца с целым числом и использовать mktime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...