Регулярное выражение для соответствия действительным датам в разных форматах - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь написать регулярное выражение, которое проверяет дату.Регулярное выражение должно соответствовать следующим форматам

  • ММ-ДД-ГГГГ
  • ММ / ДД / ГГГГ
  • ДД-ММ-ГГГГ
  • ДД / ММ / ГГГГ
  • ГГГГ-ММ-ДД
  • ГГГГ / ММ / ДД
  • ГГГГ-ДД-ММ
  • ГГГГ / ДД / ММ

и не должны совпадать с форматами, такими как ДД-ММ / ГГГГ.

Я пробовал это регулярное выражение

'^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?: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])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'

, но я могу извлечь даты только смм / дд / гггг или мм-дд-гггг или мм.дд.гггг.

Я также пытался использовать это (?: \ d {2}) {1,2} [- | / |.] \ d {2} - | / |. {1,2}, где я получаю даты, но я также получаю значения, такие как 5542-21-54, 99/01/2019, которые не представляют дату.

Спасибо всем за помощь.

1 Ответ

0 голосов
/ 21 июня 2019

Если вы хотите сопоставить дни, для которых нужно выполнить следующее регулярное выражение:

((1|2)[0-9]|3[0-1]|0?[1-9])

Для нужного месяца:

(0?[1-9]|1[0-2])

Для нужного года (только 1900 и2000, для 3000 вам может понадобиться обновить ваш скрипт, когда мы прибудем в 2999):

((19|20)?[0-9]{2})

После того, как у вас есть разные ордера с разделителями и датами, так:

((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2}) # for DD/MM/YYYY
((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2}) # for DD-MM-YYYY
((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2]) # for YYYY/DD/MM
((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]) # for YYYY-DD-MM
...

Наконец, вам нужно объединить их и получить одно совпадение с (expression1|expression2|...):

\W(((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2})|((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2})|((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])|((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]))\W

Мне нужно \W в начале и в конце регулярного выражения.Эта проверка, если у вас есть что-нибудь (\ s, \ ;, \ ,, и т. д.).

DEMO

Вам необходимо заполнить пропущенные комбинации.

Наслаждайся;)

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