正则expression式的格式为MMddyy的asp:RegularExpressionValidator(闰年问题)

我们需要使用asp.net asp:RegularExpressionValidator来正则expression式的帮助来validationMMddyy格式的date。 我们面临的问题是闰年。 问题是可以通过正则expression式validation它只接受有效的闰年date,如02/29/2008是有效date,但02/29/2010不是有效date。

任何使用“asp:RegularExpressionValidator”的正则expression式?

好的,你要求一个正则expression式。 这里是。 我认为这很明显,为什么用正则expression式validationdate并不是一个好主意:

首先,详细的评论版本,至less使理解这个野兽成为可能:

^ # 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} ) )$ 

或者,如果您不能在ASP.NETvalidation器中使用详细的正则expression式:

 ^(?:^(?:(?:(?:(?:(?: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}))$)$ 

这些允许,但不要求在一位数/月的前导零。 如果你不想要的话,replace0?所有实例0?0

如果服务器端不是一个选项,你将不得不使用JavaScript。 尝试在这里发布和解释的代码。 它确定02/29/2010无效,02/29/2008有效。 使用CustomValidator在必要时调用JavaScript函数。

由于您需要逻辑来validation闰年,请考虑使用CustomValidator 。 我把这个放在一起比较快,但希望你能明白。

 protected void dateFormatValidator_ServerValidate(object source, ServerValidateEventArgs args) { if (args.Value.Length == 6) { var month = args.Value.Substring(0, 2); var day = args.Value.Substring(2, 2); var year = args.Value.Substring(4, 2); DateTime dummyValue; args.IsValid = DateTime.TryParse(month + "/" + day + "/" + year, out dummyValue); } else { args.IsValid = false; } } 

按位说,客户端JS是这样做的,而不是一个可怕的正则expression式汤姆的mindboggling职位。 我的工作机器上有一个相当整洁的datevalidation器,我将在星期一发布。

如果你的应用程序出现了某种validation失败的问题,你可以想象尝试对这个正则expression式进行解密的噩梦吗?