Я пытаюсь написать регулярное выражение, которое проверяет дату. Регулярное выражение должно соответствовать следующему
- M / D / YYYY * * +1004
- MM / DD / YYYY
- Месяцы, состоящие из одной цифры, могут начинаться с нуля (например: 03/12/2008)
- Дни с одной цифрой могут начинаться с нуля (например: 3/02/2008)
- НЕ МОЖЕТ включать 30 февраля или 31 февраля (например, 31.02.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)$
Это соответствует должным образом, ЗА ИСКЛЮЧЕНИЕМ, которое все еще включает 30/02/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.
Спасибо всем за помощь.