Захватить до трех разных типов дат? - PullRequest
0 голосов
/ 23 января 2020

У меня есть этот RegEx здесь

^([12]\d{3})(?:[.](10|11|12|(?:0[1-9]))(?:[.](30|31|(?:0[1-9])|(?:[12]\d)))?)?$

Цель состоит в том, чтобы захватить: yyyy, yyyy.mm или yyyy.mm.dd как допустимые строки даты для поля ввода. Это делает это хорошо, однако, оказывается, что это должно быть наоборот.

Я пытался повернуть вспять процесс, но я продолжаю терпеть неудачу и не могу понять это. Как мне сделать так, чтобы это было: yyyy, mm.yyyy или dd.mm.yyyy как действительные строки даты?

(Следует отметить, что регулярное выражение для меня по сути магическое c. это интуитивно.)

1 Ответ

1 голос
/ 23 января 2020

Как отмечено в комментариях, лучше проверять правильность даты с помощью других инструментов, чем регулярные выражения. Я бы предложил использовать следующее регулярное выражение:
^((\d{2})\.)?((\d{2})\.)?(\d{4})$
, где 2-я, 4-я и 5-я группы захвата будут соответствовать соответственно дд, мм и гггг.

Вы можете проверить достоверность этих значения после.

Если вы все еще хотите сделать это полностью с одним регулярным выражением, вы можете go со следующим:
^((30|31|[012]\d)\.)?((11|12|0\d)\.)?(\d{4})$
, но это по-прежнему не охватывает проблему 29 февраля , а также соответствие 30/31 дней месяцев.

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