меньшее регулярное выражение даты - PullRequest
0 голосов
/ 28 мая 2010

У меня есть регулярное выражение для проверки дат:

^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

Работает очень хорошо, но я использую его повсеместно с валидаторами регулярных выражений asp.net и хочу минимизировать его, чтобы уменьшить размер страницы. Он работает с форматом дд / мм / гггг и обрабатывает високосные годы. Я ищу более краткое выражение регулярного выражения.

Ответы [ 3 ]

7 голосов
/ 28 мая 2010

Как насчет этого:

^(\d{1,2})\/(\d{1,2})\/(\d{4})$

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

2 голосов
/ 28 мая 2010

Вы можете просто создать класс DateValidator, который имеет метод Validate и использует это регулярное выражение, и все остальные могут ссылаться на этот класс / метод.

Если вы не можете создать новый класс, содержащий эту проверку, могли бы вы хотя бы спрятать его за глобальной строковой константой?

Таким образом, если вы когда-нибудь измените свое регулярное выражение, вы измените его только в 1 месте вместо 1000 мест.

1 голос
/ 28 мая 2010

Чувак, есть разница между анализом и проверкой. Я бы разделил два. Регулярное выражение отлично подходит для анализа даты в объекте даты. Используйте что-то еще, чтобы определить, относится ли оно к существующему моменту времени, т.е. действительно ли оно.

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