Один тип разделителя в одной строке даты и времени в RegEx - PullRequest
1 голос
/ 05 июля 2010

Есть ли способ написать Regex, который может проверять один тип разделителя только в одной строке даты и времени?

Например, 30/04/2010 правильно, но 30-04 / 2010 неправильно.

Я гуглил и нашел кое-что о возврате, но я не очень уверен, как его использовать. Например, если у меня есть это регулярное выражение:

(?P<date>((31(?![\.\-\/\—\ \,\–\-]{1,2}(Feb(ruary)?|Apr(il)?|June?|(Sep(?=\b|t)t?|Nov)(ember)?)))|((30|29)(?![\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?))|(29(?=[\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?[\.\-\/\—\ \,\–\-]{1,2}(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])[\.\-\/\—\ \,\–\-]{1,2}(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\b|t)t?|Nov|Dec)(ember)?)[\.\-\/\—\ \,\–\-]{1,2}((1[6-9]|[2-9]\d)\d{2}))

Тогда как мне использовать здесь возврат?

Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 05 июля 2010

Не ответ на ваш вопрос, но вы рассматривали возможность использования strtotime ()?

Это очень гибкая функция, способная анализировать любую английскую дату и время:

Feb 2, 2010
February 2, 2010
02/02/10
4 weeks ago
Next Monday

Если дата не разбирается, функция вернет false (или -1 до PHP 5.1).

Есть несколько ошибок - думаю, я помню, что при использовании нотации xx-xx-xxxx она, как правило, предполагает европейскую DD-MM-YYYY дату - но в целом вы можете справиться с этим гораздо лучше, чем с регулярным выражением.

1 голос
/ 05 июля 2010

Хотя ответ от Пекки намного лучше решает вашу проблему, я думаю, что стоит ответить на эту часть вашего вопроса:

Тогда как мне использовать здесь возврат?

Вот пример регулярного выражения, которое соответствует "05-07-2010" и "05/07/2010", но не "05-07 / 2010":

"#^\d{2}([/-])\d{2}\1\d{4}$#"
        ------     --

Наиболее важные части регулярного выражения подчеркнуты; \1 здесь обратная ссылка на первый подшаблон ([/-]). Вы можете получить больше информации в Руководстве PHP Обратные ссылки глава.

0 голосов
/ 05 июля 2010

Регулярное выражение, которое вы используете, похоже, проверяет строку в любом из возможных форматов, которыми может быть дата и время.Если вы просто хотите проверить свой пример 30.04.2010, вы можете использовать этот простой

([\ d] {1,2}) / ([\ d] {1,2})/ ([\ d] {2,4})

(1-2 цифры дня и месяца, 2-4 цифры года)

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