【发布时间】:2014-10-23 10:58:11
【问题描述】:
我想验证日期时间格式,例如“2014-08-29T06:44:03Z”,为此我正在寻找一个正则表达式。
尝试了几种组合,但这些对我不起作用。
【问题讨论】:
我想验证日期时间格式,例如“2014-08-29T06:44:03Z”,为此我正在寻找一个正则表达式。
尝试了几种组合,但这些对我不起作用。
【问题讨论】:
试试这个正则表达式
\b[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z\b
那里:
\b - 字边界,检查例如 '92014-08-29T06:44:03Z' 是无效的
[0-9]{n} - 匹配 n 位数字
如果字符串必须只包含日期时间而不包含其他字符,则使用:
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
【讨论】:
以下正则表达式接受 ISO-8601 UTC 日期时间字符串,以确保:
格式:YYYY-MM-DDThh:mm:ssZ
例如:2016-07-08T12:30:00Z
地点:
YYYY = 0000 到 9999
MM = 01 到 12
DD = 01 到 31
hh = 00 到 23
毫米 = 00 到 59
ss = 00 到 59
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2]\d|3[0-1])T(?:[0-1]\d|2[0-3]):[0-5]\d:[0-5]\dZ
您可以在这里进行测试:https://regex101.com/r/jE4cE4/1
【讨论】:
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])((T|\s)([0-1]\d|2[0-3]):[0-5]\d(:[0-5]\dZ?)?)?$
将@Will Jones 的回答作为对 OP 要求的扩展。这应该匹配可选的本地时间说明符和毫秒,即
2020-04-20T09:32:28+00:00
2020-04-20T09:32:28.123Z
两者都匹配。
进一步编写正负测试用例:https://regex101.com/r/ufFBTA/2
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2]\d|3[0-1])T(?:[0-1]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+|)(?:Z|(?:\+|\-)(?:\d{2}):?(?:\d{2}))
【讨论】:
rims 答案肯定会起作用,这里还有几个例子。
更简洁一点:
\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z
更精确一点:
\d{4}-[01]{1}\d{1}-[0-3]{1}\d{1}T[0-2]{1}\d{1}:[0-6]{1}\d{1}:[0-6]{1}\d{1}Z
当然,您可以编写更高级的表达式,这些表达式比使用前向和后向引用更有效,以真正确保您对允许的组合等进行 100% 验证的匹配...
【讨论】: