我试图在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进行测试时它无法正常工作 任何人都可以帮助我知道我的模式中有什么不对 谢谢
答案 0 :(得分:2)
这是因为模式当前需要而不是可选的时区修饰符,这在您给出的示例日期中不存在。
将最后一部分更改为:
( ([\-\+]([0-1][0-9])\:00))?
此外:
:
和-
修订:
/^([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
}
}
如果您只想查看日期,请从模式中删除*?