我试过了
^(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-15T13:45:30
答案 0 :(得分:2)
您错过了一个括号,并在最后添加了一个:
^(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)$
然后测试有效性:
或者,更好的是,使用日期解析器;我有一个以您最喜欢的语言存在的。
答案 1 :(得分:0)
你当天第12部分[0-9]就是问题所在。可能意味着[12] [0-9]
答案 2 :(得分:0)
托托的答案解决了你所有的问题,但没有告诉你原因。
你有4个错误:
错误地放置括号
(0[1-9]|12[0-9]|3[01]T -> (0[1-9]|12[0-9]|3[01])T
小时第一位数字缺少括号
(0[1-9]|12[0-9]|3[01]) -> (0[1-9]|[12][0-9]|3[01])
秒数第一位数字缺少括号
(0[0-9]|12345[0-9]) -> (0[0-9]|[12345][0-9])
最后错位的括号
(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])$