-2

我在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

任何人都可以看到这个正则表达式的问题吗?

4

1 回答 1

2

该正则表达式仅接受 am/pm 格式的小时数,从0to 12

((\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})?$
于 2012-09-02T18:59:52.580 回答