We need help for regular expression that work with asp.net asp:RegularExpressionValidator to validate date in MMddyy format. Problem we are facing is leap year. Issue is that is it possible to verify through regular expression that it only accepts valid leap year dates like 02/29/2008 is a valid date but 02/29/2010 is not a valid date.
Any regular expression that works with "asp:RegularExpressionValidator"?
OK, you asked for a regex. Here it is. I think it's immediately obvious why it's not a good idea to validate a date with a regular expression:
First, the verbose, commented version to at least make understanding this beast possible:
^ # start of string
(?: # either match...
(?:
(?: # 31st day of all allowed months
(?:(?:0?[13578]|1[02])/31)
| # or
(?:(?:0?[13-9]|1[0-2])/(?:29|30))
) # 29th/30th day of any month except February
/ # plus any year since 1600
(?:1[6-9]|[2-9]\d)
\d{2}
)
| # or
(?: # match Feb 29th
0?2/29/
(?: # in all leap years since 1600
(?:
(?: # century
1[6-9]|[2-9]\d
)
(?: # two-digit years divisible by four, not ending in 00
0[48]
|
[2468][048]
|
[13579][26]
)
|
(?: # all the leap years ending in 00
(?:16|[2468][048]|[3579][26])
00
)
)
)
)
| # or
(?: # (for any month)
(?:0?[1-9])
|
(?:1[0-2])
)
/
(?: # match the 1st-28th day
0?[1-9]|1\d|2[0-8]
)
/
(?:
(?:1[6-9]|[2-9]\d)\d{2}
)
)$
Or, if you can't use verbose regexes in ASP.NET validators:
^(?:^(?:(?:(?:(?:(?:0?[13578]|1[02])/31)|(?:(?:0?[13-9]|1[0-2])/(?:29|30)))/(?:1[6-9]|[2-9]\d)\d{2})|(?:0?2/29/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))/(?:0?[1-9]|1\d|2[0-8])/(?:(?:1[6-9]|[2-9]\d)\d{2}))$)$
These allow but do not require a leading zero in single-digit months/days. If you don't want that, replace all instances of 0?
with 0
.