我使用asp.net 4和c#。
我需要使用类型为Val RegularExpressionValidator
的WebControl来检测IS NOT in format yyyy-MM-dd
(字符串)的TextBox中输入的数据。
知道如何编写RegEx以应用此控件吗?
由于
答案 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}} ...
经过测试的工作完美..