ASP.NET正则表达式验证器中日期时间格式"MM/DD/YY HH:mm:ss AM/PM"的正则表达式。

4

有人能告诉我“MM/DD/YY HH:mm:ss AM/PM”的正则表达式格式,以便在asp.net 2.0中使用它作为正则表达式验证器吗?

7个回答

5

我强烈建议您不要使用正则表达式来实现此功能。相反,您应该创建自己的验证器(继承BaseValidator),并使用DateTime.TryParseExact来检查值是否可以转换为DateTime。


但我想在客户端验证它,不应该去服务器端验证。还有一件事是,如果我为按钮使用客户端单击,则所有其他必需的验证器都无法工作。请建议。 - Rupa

3
这对我有用。
^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?: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])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$

Source of regex


1
太好了,这对我也起作用了,尽管发布已经4年了,但它仍然非常有帮助。 - N Khan

2

虽然这是一个老问题,但经常被问到。

正则表达式用于匹配所有日期,包括闰年。

对于DD-MM-YYYY格式

^(?:31#(?:(?:0[13578])|(?:1[02]))#)|(?:(?:29|30)#(?:(?:0[1,3-9])|(?:1[0-2]))#)(?:(?:1[6-9]|[2-9]\d)\d{2})$|^(?:29#02#(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0[1-9])|(?:1\d)|(?:2[0-8]))#(?:(?:0[1-9])|(?:1[0-2]))#(?:(?:1[6-9]|[2-9]\d)\d{2})$

对于 MM-DD-YYYY 格式:
^(?:(?:(?:0?[13578]|1[02])#31)\1|(?:(?:0?[1,3-9]|1[0-2])#(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2#29\3(?:(?:(?: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])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

请将正则表达式中的#替换为您所需的日期分隔符。如果要替换为全局分隔符,请使用(/|-|.)代替#。
已测试正则表达式可成功匹配以下日期,并且性能良好。
29-02-2000 ---> true
millis 2
29-02-2006 ---> false
millis 0
29-02-2001 ---> false
millis 0
30-02-2000 ---> false
millis 0
31-11-2000 ---> false
millis 0
29-13-2000 ---> false
millis 0
31-11-2000 ---> false
millis 0
31-07-2000 ---> true
millis 0
31-08-2000 ---> true
millis 1
31-12-2000 ---> true
millis 0
30-11-2011 ---> true
millis 0
17-07-2011 ---> true
millis 0
04-10-1987 ---> true
millis 0
01-01-1900 ---> true
millis 0
24-05-88 ---> false
millis 0
24-05-88 ---> false
millis 0
29-12-2011 ---> true
millis 0
31-12-2000 ---> true
millis 0
1-1-2010 ---> false
millis 0
1-1-99 ---> false
millis 0
1-01-99 ---> false
millis 0
01-1-99 ---> false
millis 0

1

对于客户端(JavaScript)验证,您可以使用

^\d\d/\d\d/\d\d \d\d:\d\d:\d\d [AP]M$

该程序将会严格检查语法(数字、空格、分隔符)是否符合您的规范。如果匹配成功,您需要检查返回匹配的子组中输入值的范围(例如 1 <= 月份 <= 12 等)。

使用 此网站 来测试正则表达式。


-1
     (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d

格式为 MM-DD-YYYY


-1

看看这个。它还验证了闰年。

^(((0[13578]|1[02])[\/\.-](0[1-9]|[12]\d|3[01])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((0[13456789]|1[012])[\/\.-](0[1-9]|[12]\d|30)[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](0[1-9]|1\d|2[0-8])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](29)[\/\.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm)))$

06/12/2014 12:45:56 AM // true
11-12-1965 06:04:34 PM // true
11/31/2015 11:40:00 AM // false
12-31-1945 01:38:09 PM // true
02/29/2012 09:04:10 AM // true [leap year]
02/29/2013 09:04:10 AM // false
06.12.2014 13:04:10 AM // false

演示


-2

你能试试这个吗?

(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/\d\d (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]) [AM|PM]

希望它能解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接