2013-05-26 2 views

ответ

2

Это зависит от того, если вы хотите, чтобы соответствовать номерам:

\d\d-\d\d-\d\d 

Но если вы хотите быть уверены, что любая дата является действительным, он должен быть либо неточными или невозможно (не может работать с февраля).

Вот лучше регулярное выражение, но все еще не совершенны:

(1[0-2]|0\d)-([0-2]\d|3[0-1])-\d\d 
+0

чувак в мм 0-3 должен использоваться –

+2

Что такое 13 месяцев? – deufeufeu

0

Это просто:

/^\d\d-\d\d-\d\d$/ 

Но вы должны убедиться, что дата действительна с использованием библиотеки дат после этой простой проверки формата: никакое разумное регулярное выражение не проверяет, что вы не 29 февраля в год без бисектиля.

2

Я всегда использую \d{2}-\d{2}-\d{2}, но учтите, что это позволяет «даты» как 13-13-13.

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

Другое примечание состоит в том, что этот формат очень неоднозначен. Если возможно, используйте yyyy-mm-dd или dd-mm-yyyy.

+0

вы уверены, что '-' не соответствует для оценки диапазона? –

+0

@Aniket: Только в классе персонажей. – Ryan

+0

Да. Вам нужно будет использовать скобки, чтобы активировать материал диапазона, например '' [a-z] ''. – mzedeler

0
/[1-3]{1,2}-[1-9]{1,2}-[1-9]{1,2}/ 
+0

Что делает '' 1-1-1'' допустимым формат даты. Мне бы это не понравилось. – mzedeler

+0

@mzedeler, но который читает 1-й ян 1-й день 1-го года, я согласен, что это не так много, чтобы проверить даты –

+0

Да, но @Marty Уоллес просит двузначный формат с ведущими нулями. – mzedeler

0

Просто для удовольствия, вот тот, который соответствует только действительные даты. Поскольку вы используете двузначные годы, предполагается, что 00 - 2000 (это високосный год); если вы ищете 1900 или 2100, это потребует изменения.

/^((0[13-9]|1[012])-(0[1-9]|[12]\d|30)|([13578]|1[02])-31)-\d\d|02-(0[1-9]|[12][0-8])-\d\d|02-29-([02468][048]|[13579][26])$/ 
Смежные вопросы