我试过了
^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|12[0-9]|3[01]T(0[0-9]|1[0-9]|2[0123]):(0[0-9]|12345[0-9]):(0[0-9]|12345[0-9]))$
和
^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|12[0-9]|3[01][T](0[0-9]|1[0-9]|2[0123])[:](0[0-9]|12345[0-9])[:](0[0-9]|12345[0-9]))$
并且它们都不对示例日期时间起作用- 2009-06- 15 T13:45:30
5条答案
按热度按时间3okqufwl1#
您遗漏了一个括号,请在结尾处添加一个额外的括号:
您也可以简化为:
另一种只测试格式然后测试有效性的方法是:
然后测试有效性:
或者,使用日期解析器更好;,我在那里有一种存在于你最喜爱的语言中的东西。
nnt7mjpx2#
托托的回答解决了你所有的问题,但没有告诉你为什么。
你有4个错误:
1.括号放错
(0[1-9]|12[0-9]|3[01]T -> (0[1-9]|12[0-9]|3[01])T
1.小时数第一位缺少括号
(0[1-9]|12[0-9]|3[01]) -> (0[1-9]|[12][0-9]|3[01])
1.秒的第一个数字缺少括号
(0[0-9]|12345[0-9]) -> (0[0-9]|[12345][0-9])
1.结尾处缺少括号
(0[0-9]|12345[0-9]))$ -> (0[0-9]|12345[0-9])$
为了优化这一点,我将引用托托的答案。
这是修复之前的第二个解决方案:
这是修复后的第二个解决方案:
pokxtpni3#
你今天有12[0-9]部分,这就是问题所在。可能是指[12][0-9]
sr4lhrrt4#
这是我的工作食谱
fnx2tebb5#
这是我的工作食谱
/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/g