正则表达式验证 UTC 日期时间格式

Posted

技术标签:

【中文标题】正则表达式验证 UTC 日期时间格式【英文标题】:regex to verify UTC date time format 【发布时间】:2014-10-23 10:58:11 【问题描述】:

我想验证日期时间格式,例如“2014-08-29T06:44:03Z”,为此我正在寻找一个正则表达式。

尝试了几种组合,但这些对我不起作用。

【问题讨论】:

【参考方案1】:

试试这个正则表达式

\b[0-9]4-[0-9]2-[0-9]2T[0-9]2:[0-9]2:[0-9]2Z\b

那里:

\b - 字边界,检查例如 '92014-08-29T06:44:03Z' 是无效的

[0-9]n - 匹配 n 位数字

如果字符串必须只包含日期时间而不包含其他字符,则使用:

^[0-9]4-[0-9]2-[0-9]2T[0-9]2:[0-9]2:[0-9]2Z$

【讨论】:

【参考方案2】:

以下正则表达式接受 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

\d4-(?: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

【讨论】:

完整单词和可选格式的变体:yyyy-MM-dd HH:mm:ss or, yyyy-MM-dd HH:mm or, yyyy-MM-dd , "T" and "Z " 是可选的。 ^\d4-(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?)?)?$【参考方案3】:

将@Will Jones 的回答作为对 OP 要求的扩展。这应该匹配可选的本地时间说明符和毫秒,即

2020-04-20T09:32:28+00:00

2020-04-20T09:32:28.123Z

两者都匹配。

进一步编写正负测试用例:https://regex101.com/r/ufFBTA/2

\d4-(?: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|(?:\+|\-)(?:\d2):?(?:\d2))

【讨论】:

【参考方案4】:

rims 答案肯定会起作用,这里还有几个例子。

更简洁一点:

\d4-\d2-\d2T\d2:\d2:\d2Z

更精确一点:

\d4-[01]1\d1-[0-3]1\d1T[0-2]1\d1:[0-6]1\d1:[0-6]1\d1Z

当然,您可以编写更高级的表达式,这些表达式比使用前向和后向引用更有效,以真正确保您对允许的组合等进行 100% 验证的匹配...

【讨论】:

以上是关于正则表达式验证 UTC 日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式日期验证格式

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

正则表达式波斯日期验证

Js 自定义日期格式的正则表达式验证

验证日期格式正则表达式