Regex для проверки дат в этом формате д / м / гггг - PullRequest
2 голосов
/ 05 февраля 2011

Я нашел регулярное выражение , которое творит чудеса, но заставляет начинать 0 с месяца и дня, и мне нужно принять даты с месяцем и / или днем ​​в формате одной цифры

Ответы [ 3 ]

3 голосов
/ 05 февраля 2011

Я проверял это с REGex Tester:

^(((0?[1-9]|[12]\d|3[01])\/(0?[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\/(0?[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\/0?2\/((1[6-9]|[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))))$

Это то же самое @ ant18, но я добавил ? для каждого ведущего 0.

РЕДАКТИРОВАТЬ: sry неправильно прочитал имя автора, исправлено

1 голос
/ 05 февраля 2011

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

То же, что и указанное вами регулярное выражение с необязательным начальным 0.

0 голосов
/ 05 февраля 2011

это сделает это:

var rx = /^(3[0-1]|[0-2]?[0-9])\/(1[0-2]|0?[0-9])\/[0-9]{4}$/;

   rx.text('01/01/2000'); //true

   rx.text('1/1/2000'); //true

   rx.text('32/1/2000'); //false

   rx.text('1/13/2000'); //false

Однако на самом деле это не обеспечит правильную дату, поскольку позволит датам, таким как 31/2/2000

Для анализа даты и проверкион делится на / и использует new Date для создания объекта даты из значений, затем извлекает те же значения и проверяет, совпадают ли они, если не дата недействительна:)

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