я пытался сопоставить даты, начиная с 1900 по 2017 год в формате dd/mm/yyyy, используя это
^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$
но я наблюдаю, что это регулярное выражение не подходит для дат, таких как 16/06/2008 и 21/02/2008.
Чтобы убедиться, что все части этого регулярного выражения работают или нет, я попробовал все три части, такие как ^(0[1-9]|1[0-9]|2[0-9]|3[01])$
, ^(0[1-9]|1[012])$
и ^(19[0-9]{2}|20[0-1][0-7])$
на разные множества дней месяцев и лет, но я обнаружил, что они работают нормально, но когда я запускал его вместе, у меня был такой же неожиданный результат на дату, как 16/06/2008
.
Кроме того, я хочу сообщить вам, что я использую это регулярное выражение в javascript:
var patt = new RegExp("^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$");
var res = patt.exec(datestring);
для таких дат, как 16/06/2008
res, оценивается как null.
Пожалуйста, дайте мне знать, где я ошибаюсь. Чтобы решить эту проблему, я просмотрел некоторые учебные пособия по регулярному выражению и ранее заданные вопросы, но я не нашел никакого релевантного ответа, который мог бы сказать мне, почему это регулярное выражение не выполняется для некоторых конкретных дат. Пожалуйста помоги.
Вместе с
20[0-1][0-7]
не соответствует 2008 году (8 не попадает в диапазон [0-7]), вы также можете избежать слэшей в регулярном выражении, используя обратную косую черту, как показано ниже
^(0[1-9]|1[0-9]|2[0-9]|3[01])\/(0[1-9]|1[012])\/(19[0-9]{2}|20[0-1][0-9])$
Поскольку 2008 не соответствует 20 [0-1] [0-7]
(19[0-9]{2}|20[0-1][0-7])
на(19[0-9]{2}|200[0-9]|201[0-7])