asp 的正则表达式:RegularExpressionValidator 格式为 MMddyy(闰年问题) [英] Regular expression for asp:RegularExpressionValidator with format MMddyy (leap year issue)

查看:23
本文介绍了asp 的正则表达式:RegularExpressionValidator 格式为 MMddyy(闰年问题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们需要与 asp.net asp:RegularExpressionValidator 一起使用的正则表达式的帮助,以验证 MMddyy 格式的日期.我们面临的问题是闰年.问题是是否可以通过正则表达式验证它只接受有效的闰年日期,例如 02/29/2008 是有效日期,但 02/29/2010 不是有效日期.

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.

任何与asp:RegularExpressionValidator"配合使用的正则表达式?

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]|1d|2[0-8]
 )
 /
 (?:
  (?:1[6-9]|[2-9]d)d{2}
 )
)$

或者,如果您不能在 ASP.NET 验证器中使用详细的正则表达式:

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]|1d|2[0-8])/(?:(?:1[6-9]|[2-9]d)d{2}))$)$

这些允许但不要求在个位数的月/日中使用前导零.如果您不希望那样,请将 0? 的所有实例替换为 0.

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.

这篇关于asp 的正则表达式:RegularExpressionValidator 格式为 MMddyy(闰年问题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆