datetime正则表达式模式匹配yyyy-MM-dd hh:mm:ss格式

时间:2017-08-31 09:30:17

标签: javascript regex

我试图在javascript中创建正则表达式模式以验证日期时间格式yyyy-MM-dd hh:mm:ss

/([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9]) ([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(([\-\+]([0-1][0-9])\:00))/

以下是jsfiddle

的示例

但是当我在这个日期时间2017-08-31 01:22:34进行测试时它无法正常工作 任何人都可以帮助我知道我的模式中有什么不对 谢谢

3 个答案:

答案 0 :(得分:2)

这是因为模式当前需要而不是可选的时区修饰符,这在您给出的示例日期中不存在。

将最后一部分更改为:

( ([\-\+]([0-1][0-9])\:00))?

此外:

  • 您的小时子组匹配0-59而不是0-23。
  • 你正在逃避一些你不需要的东西,例如: :-
  • 该模式允许无效日期,例如39日一天。

修订:

/^([0-2][0-9]{3})\-(0[1-9]|1[0-2])\-([0-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):([0-5][0-9])\:([0-5][0-9])( ([\-\+]([0-1][0-9])\:00))?$/

请注意,这不会占某些月份的预付日期,例如2月30日。这意味着要么使模式更复杂,要么使用比REGEX更适合日期验证的东西。

答案 1 :(得分:0)

这是因为最后一部分应该是可选的(([\-\+]([0-1][0-9])\:00))?

这是一个演示



var a = /([0-2][0-9]{3})-([0-1][0-9])-([0-3][0-9]) ([0-5][0-9]):([0-5][0-9]):([0-5][0-9])(([\-\+]([0-1][0-9])\:00))?/;

console.log('2017-08-31 01:22:34'.match(a))




顺便说一下,你不必逃避:。只有在括号-

中使用时才应转义[]

答案 2 :(得分:0)

在Java中,我们可以像下面这样使用,也可以将这种模式用于javascript

private static Pattern DATE_PATTERN = Pattern.compile(".*?\[0-9\]{4}-(0\[1-9\]|1\[0-2\])-(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\]) (2\[0-3\]|\[01\]\[0-9\]):\[0-5\]\[0-9\]:\[0-5\]\[0-9\]");

public void test() {
    if(!DATE_PATTERN.matcher(line.trim()).matches()) {
        //code here
    }
}

enter image description here

如果您只想查看日期,请从模式中删除*?