我正在尝试编写一个正则表达式,用于在javascript函数中测试日期时间。
我只想以下列格式允许日期:
YYYY-MM-DD HH:mm:ss
YYYY-MM-DDTHH:mm:ss
YYYY-MM-DD HH:mm
YYYY-MM-DDTHH:mm
到目前为止,这是我设法得到的:
/^(19[0-9]{2}|2[0-9]{3})-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ \/T\/t]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/
它可以做我想要的,除了需要几小时,几分钟和几秒,而不是小时和分钟,可选秒。
感谢您的帮助!
我写了一个小jsFiddle和一些测试数据,让你的生活更轻松。只需更新模式变量并运行它,表格就应该匹配。
答案 0 :(得分:3)
更新:我更新了这个答案,将(...)改为(?:...),这样你的捕获就不会搞砸了。
试试这个:
/^(19[0-9]{2}|2[0-9]{3})-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ \/T\/t]([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/
更新小提琴: http://jsfiddle.net/smMJC/5/
我所做的就是改变
:([0-5][0-9])
为:
(?::([0-5][0-9]))?
这意味着使该部分可选。 (双冒号是有意的,因为它是外部的(?: ... )?
非捕获组和内部的文字“:”。
此外,您可能想要更改:
[ \/T\/t]
为:
[ Tt]
除非您真的想匹配以下字符串:
2013-01-01/15:30:30
用斜杠代替T - 比较这两个演示:
答案 1 :(得分:1)
更改
[0-9]
至\d
[ t]
并添加不区分大小写的修饰符/.../i
:([0-5]\d)
到可选(?::([0-5]\d))?
正则表达式:
/^(19|2\d)\d\d-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ t]([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d))?$/i
如果您不需要捕获日期时间字符串的各个部分
()
()
替换为非必要的(?:...)
正则表达式:
/^(?:19|2\d)\d\d-(?:0[1-9]|1[012])-(?:[123]0|[012][1-9]|31)[ t](?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/i