2010-01-16 114 views
7

我希望HH:MM:SS AM/PM的正则表达式在这里HH必须只有1-12,MM必须60分钟,SS照常(60秒)我有任何它正确的... ?正则表达式的时间

+0

您的'HH'符号意味着小时必须填零并从00开始,但您在后面的问题中与此相矛盾。你究竟是什么意思?你可以更精确一点,也许有一些匹配和失败字符串的例子吗? – 2010-01-16 08:05:19

回答

12
(0[1-9]|1[0-2]):([0-5][0-9]:[0-5][0-9]|(59|44|29):60) (AM|am|PM|pm) 
+2

+1闰秒。你错过了AM/PM,但这很容易。 – 2010-01-16 08:02:29

+2

闰秒在上午和下午都会发生,具体取决于您的时区(如果您是+ GMT,则发生在上午)。 – mynameiscoffey 2010-01-16 08:21:47

+0

只需要am/pm小型号就可以了: (0 [1-9] | 1 [0-2]):([0-5] [0-9]):([0-5] [0 -9] | 60)(上午|下午|上午|下午) – 2010-01-16 08:57:22

8
/^([1-9]|10|11|12):[0-5][0-9]:[0-5][0-9] [AP]M$/ 
+0

优雅!为简洁起见+1。 – 2010-01-16 08:19:30

+0

不支持问题中给出的HH表示法,他也遵循“HH必须是1-12”,所以谁知道。也可能想要添加一个闰秒的例子,尽可能少见。 – mynameiscoffey 2010-01-16 08:24:08

+0

它当然可以缩短:/ ^([1-9] | 1 [0-2])(:[0-5] [0-9]){2} [AP] M $ /但我认为它使阅读变得更加困难。 ;) – 2010-01-16 08:24:40

5

如果你希望能够有零填充可选以及闰秒:

/^((0?[1-9])|(1[0-2])):[0-5]\d:(([0-5]\d)|(60)) [AP]M$/ 

细目:
(0?[1-9]|1[0-2]) 1-9(带有可选的前导零)或10-12
[0-5][0-9] 00-59(第一位0-5,第二位0-9)
([0-5][0-9])|(60)闰秒
[AP]M AM/PM

+0

更新,感谢您的接触 - 这是我得到的不先测试它。 – mynameiscoffey 2010-01-16 08:45:34

+0

很好的正则表达式! – jspcal 2010-01-16 08:52:38