正则表达式检测yyyy-MM-dd

Gib*_*boK 9 c# regex asp.net validation

我使用asp.net 4和c#.

我需要使用Validation类型的WebControl RegularExpressionValidator来检测TextBox中的数据IS NOT in format yyyy-MM-dd(String).

知道怎么写RegEx来应用这个控件吗?

谢谢

Spu*_*ley 15

这是一个可能的正则表达式:

^\d{4}-((0\d)|(1[012]))-(([012]\d)|3[01])$
Run Code Online (Sandbox Code Playgroud)

注意:这将阻止数月> 12天和> 31天,但不会检查特定月份的长度(即它不会阻止2月30日或4月31日).你可以编写一个正则表达式来做这件事,但这将是相当冗长的,2月29日总是会给你正则表达式的问题.

我想说如果你需要那种细粒度的验证,你最好用日期库解析日期; 正则表达式不适合你.这个正则表达式应该足以进行基本的预验证.

这一年我也很宽容; 只检查它是四位数.但是如果你想要某种健全性检查(即在某些范围内),那么添加起来应该不会太难.例如,如果你想只匹配本世纪的日期,你可以用\d{4}正则表达式替换正则表达式的开头20\d{2}.同样,尝试在正则表达式中过度准确地验证日期将很困难,您应该使用日期解析器,但是您可以非常轻松地获得基本的世纪级匹配,以防止用户输入任何非常愚蠢的内容.

最后,如果用户输入有效日期和额外字符,我已经放置^$绑定字符串的末尾,使其无法匹配.(您可能还想为此添加字符串长度验证器).

希望有所帮助.


Ral*_*177 8

Spudley上面的回答允许00日和月.

我修好了它 :

^\d{4}-((0[1-9])|(1[012]))-((0[1-9]|[12]\d)|3[01])$
Run Code Online (Sandbox Code Playgroud)

注意:这些表达式都不会检查一个月内无效的天数,例如非闰年的04/31,06/31或02/29.


red*_*t84 5

正则表达式\d\d\d\d-\d\d-\d\d应该可以解决问题.

  • @Daniel提供一个不允许无效日期而不是向下投票的日期. (5认同)