Регулярное выражение не является лучшим инструментом для этой работы.
Если это вообще возможно, просто соответствует ^\d{8}$
(или ^\d\d\d\d\d\d\d\d$
если вашему регулярное_выражению двигатель не поддерживает синтаксис {8}
) , а затем программно проверить, что дата является действительной.
в немного более подробно:
- Match
^(\d\d)(\d\d)(\d\d\d\d)$
(настроить синтаксис при необходимости).
- Извлечь три группы соответствия и программно проверить, что они представляют собой действительную дату.
Последний требует (а) знать количество дней в каждом месяце и (б) знать, какие годы являются високосные годы (что зависит от того, какой календарь вы используете, а григорианский - очевидный выбор, но думаю за несколько лет до его введения).
Итоговый код будет много легче читать и обслуживать.
(Кроме того, если у вас есть какой-либо контроль над форматом, рассмотреть возможность использование ГГГГММДДА, а не ДДММГГГГ, сортирует правильно, и это один из форматов, указанных в ISO 8601 стандарта.)
Что не работает? – Bohemian
Итак, почему бы не просто удалить '(\/| - | \..)' Из ответа на этот другой вопрос? Что не работает? –
Я не могу сопоставить пример выше (попробовал его в regexpal, и хотя ответ в ссылке отлично работает для dd/mm/yyyy, когда я удаляю (\/| - | \.), Он по-прежнему не соответствует – dimzak