regex 我的正则表达式与yyyy-mm-ddThh:mm:ss不匹配

7rtdyuoh  于 2022-11-26  发布在  其他
关注(0)|答案(5)|浏览(167)

我试过了

^(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

3okqufwl

3okqufwl1#

您遗漏了一个括号,请在结尾处添加一个额外的括号:

^(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])$ 
//                          add parenthesis here       __^                                           and delete the one here __^

您也可以简化为:

^(19|20)\d\d-(0[1-9]|1[012])-([012]\d|3[01])T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$

另一种只测试格式然后测试有效性的方法是:

^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)$

然后测试有效性:

  • 1900年至2000年间第1组
  • 组2介于01和12之间
  • 组3介于01和31之间
  • 组4介于00和23之间
  • 组5介于00和59之间
  • 组6介于00和59之间

或者,使用日期解析器更好;,我在那里有一种存在于你最喜爱的语言中的东西。

nnt7mjpx

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])$
为了优化这一点,我将引用托托的答案。

^(19|20)\d\d-(0[1-9]|1[012])-([012]\d|3[01])T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$

这是修复之前的第二个解决方案:

^(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]|[1]2[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])$

pokxtpni

pokxtpni3#

你今天有12[0-9]部分,这就是问题所在。可能是指[12][0-9]

sr4lhrrt

sr4lhrrt4#

这是我的工作食谱

const exp  = /^([\+-]?\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;
fnx2tebb

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

相关问题