正则表达式匹配ISO 8601日期时间字符串

94

有没有一个好的正则表达式模式可以匹配ISO日期时间?

例如:2010-06-15T00:00:00


2
我使用 /^(\d{4})-0?(\d+)-0?(\d+)[T ]0?(\d+):0?(\d+):0?(\d+)$/,(然而这并不是最严格的一个)... 将其转换为日期对象则是另外一回事 :) - mykhal
12个回答

1
Brocks的回答很好,但应该以^ 开头并以 $ 结尾,这样可以防止匹配日期字符串时包含前缀/后缀字符。

1

从公元1900年到2999年,带有02/29验证

 (((2000|2400|2800|((19|2[0-9])(0[48]|[2468][048]|[13579][26])))-02-29)|(((19|2[0-9])[0-9]{2})-02-(0[1-9]|1[0-9]|2[0-8]))|(((19|2[0-9])[0-9]{2})-(0[13578]|10|12)-(0[1-9]|[12][0-9]|3[01]))|(((19|2[0-9])[0-9]{2})-(0[469]|11)-(0[1-9]|[12][0-9]|30)))T([01][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]\.[0-9]{3}Z

1
这个正则表达式允许无效日期,例如:19-02-29T20:59:39.217Z,其中年份不符合ISO格式yyyy。您可以在Chrome控制台中尝试此操作以进行检查: /(((2000|2400|2800|(19|20-9))-02-29)|(((19|2[0-9])[0-9]{2})-02-(0[1-9]|1[0-9]|2[0-8]))|(((19|2[0-9])[0-9]{2})-(0[13578]|10|12)-(0[1-9]|[12][0-9]|3[01]))|(((19|2[0-9])[0-9]{2})-(0[469]|11)-(0[1-9]|[12][0-9]|30)))T([01][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9].[0-9]{3}Z/.test("19-02-29T20:59:39.217Z"); - ferpel

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