这个正则表达式的日期/时间有什么问题

时间:2012-09-02 18:53:57

标签: javascript jquery regex

我在http://regexlib.com/REDetails.aspx?regexp_id=233找到了一个很好的正则表达式。为了便于参考,它是

^([0]\d|[1][0-2])\/([0-2]\d|[3][0-1])\/([2][01]|[1][6-9])\d{2}(\s([0]\d|[1][0-2])(\:[0-5]\d){1,2})*\s*([aApP][mM]{0,2})?$

我对正则表达式一无所知,所以我根本不知道如何调试它。我从这个jQuery插件http://trentrichardson.com/examples/timepicker/获得了一个日期/时间字符串,格式为:

"09/02/2012 14:51" //Fail

然而,上面是一个失败字符串的例子,虽然它对我来说似乎很好。当我得到当前时间时,它通过:

"12/22/2012 00:01" //Pass

有人能看到这个正则表达式的问题吗?

1 个答案:

答案 0 :(得分:2)

正则表达式只接受上午/下午格式的小时数,从012

((\s([0]\d|[1][0-2])(\:[0-5]\d){1,2})*\s*([aApP][mM]{0,2})?)
     ^-------------
     This block represents the hours, and its range is 0-12

要考虑一天中的小时,从0到23,请将以下内容添加到小时部分:

(0\d|1[0-9]|2[0-3])

产生最终的正则表达式:

/^([0]\d|[1][0-2])\/([0-2]\d|[3][0-1])\/([2][01]|[1][6-9])\d{2}(\s(([0]\d|[1][0-2])|(0\d|1[0-9]|2[0-3]))(\:[0-5]\d){1,2})*\s*([aApP][mM]{0,2})?$