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

时间:2011-03-09 14:29:29

标签: c# asp.net regex validation

我使用asp.net 4和c#。

我需要使用类型为Val RegularExpressionValidator的WebControl来检测IS NOT in format yyyy-MM-dd(字符串)的TextBox中输入的数据。

知道如何编写RegEx以应用此控件吗?

由于

7 个答案:

答案 0 :(得分:15)

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

^\d{4}-((0\d)|(1[012]))-(([012]\d)|3[01])$

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

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

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

最后,我已将^$绑定到字符串的末尾,以便在用户输入有效日期和额外字符时无法匹配。 (您可能还想为此添加字符串长度验证器。)

希望有所帮助。

答案 1 :(得分:8)

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

我修好了它:

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

我想在Spudley的答案中加一点改变:

^\d{4}$|^\d{4}-((0?\d)|(1[012]))-(((0?|[12])\d)|3[01])$

所以你可以使用像2013-5-5这样的日期(月份和日期不是零,但可以使用)

希望它有所帮助。

答案 4 :(得分:0)

ISO 8601结构化日期的另一个实现:

^ \ d {4} - \ d {1,2} - \ d {1,2} \ S \ d {1,2}:\ d {1,2}:\ d {1,2} ?\ d {0,1} $

它不是那么严格,并且会接受不正确的日期,但它应该验证它遵循ISO 8601结构,即使日期不存在。对于具有基本正则表达式理解的任何人来说,理解它也应该相当简单。

如果您确实想确保日期正确并使用它,请在其上运行DateTime.TryParse()。

答案 5 :(得分:0)

(19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])

马赫结果:

1999年9月12日

答案 6 :(得分:-1)

((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-((0[469])|11)-((0[1-9])|([12][0-9])|(30)))|(((000[48])|([0-9]0-9)|([0-9][1-9][02468][048])|([1-9][0-9][02468][048]))-02-((0[1-9])|([12][0-9])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-02-((0[1-9])|([1][0-9])|([2][0-8])))

这是yyyy-MM-dd格式的正则表达式。

您可以将-替换为\/的{​​{1}} ...

经过测试的工作完美..