求匹配2019-01-09T11:05:29.000Z格式的正则,现有表达式失效求助
匹配ISO 8601格式日期的正则解决方案
嘿,作为正则新手,你已经迈出了很不错的第一步!咱们来拆解下问题,快速搞定这个匹配需求。
你的原正则为什么不工作?
你的正则有几个地方和目标格式2019-01-09T11:05:29.000Z不匹配:
- 完全没包含末尾的
.000Z部分,这是最核心的缺失 - 允许用
/作为日期分隔符,但目标格式是固定的- - 允许用空格替代
T,但目标格式里是固定的T字符
针对目标格式的正确正则
如果是严格匹配你给出的YYYY-MM-DDTHH:MM:SS.000Z格式,这个正则就够用:
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
逐部分解释(方便你理解):
^:标记字符串的起始位置,确保不会匹配字符串中间的片段\d{4}:匹配4位年份(比如2019)-:匹配日期之间的短横线分隔符\d{2}:匹配2位月份(01到12)-:再次匹配日期分隔符\d{2}:匹配2位日期(01到31,如果需要严格校验日期合法性,正则会更复杂,比如区分2月的最大天数、闰年等,新手阶段先满足格式匹配即可)T:匹配固定的T字符,分隔日期和时间\d{2}:\d{2}:\d{2}:匹配时分秒(比如11:05:29)\.\d{3}:匹配小数点加上3位毫秒(比如.000)Z:匹配固定的Z字符,表示UTC时区$:标记字符串的结束位置,确保不会匹配后面多余的内容
可选的灵活调整
如果你的场景中毫秒部分可能不是固定的3位(比如有的时候是1-3位),可以把\d{3}改成\d{1,3}:
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{1,3}Z$
小提示
如果你后续需要更严格的日期合法性校验(比如区分不同月份的最大天数、闰年等),纯正则会非常冗长,这种情况下建议结合编程语言的日期解析库来处理,会更可靠哦!
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

