Я пытаюсь написать регулярное выражение, которое проверяет дату. Регулярное выражение должно соответствовать следующему
- M/D/YYYY
- MM/DD/YYYY
- Однозначные месяцы могут начинаться с начального нуля (например: 03/12/2008)
- Однозначные дни могут начинаться с начального нуля (например: 3/02/2008)
- НЕ МОЖЕТ включать 30 февраля или 31 февраля (например: 2/31/2008)
До сих пор у меня
^(([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d)|((1[012]|0[1-9])(3[01]|2\d|1\d|0[1-9])(19|20)\d\d)|((1[012]|0[1-9])[-/.](3[01]|2\d|1\d|0[1-9])[-/.](19|20)\d\d)$
Это соответствует правилу EXCEPT, он по-прежнему включает в себя 2/30/2008 и 2/31/2008.
Есть ли у кого-нибудь лучшее предложение?
Изменить: Я нашел ответ в RegExLib
^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$
Он соответствует всем допустимым месяцам, которые соответствуют формату MM/DD/YYYY.
Спасибо всем за помощь.