我一直在网上寻找一种只做12/24小时时间格式(_ _:_ _没有AM / PM)验证的方法。要求是它必须主动防止会使时间无效的按键。它也必须在冒号不超过23之前接受1或2位数,并且在不超过59之后需要2位数。
我使用了jquery inputmask和maskedinput都无济于事。无论我尝试什么,他们都表现得并不完全正确。
我终于发现这篇文章http://blog.pierrejeanparra.com/2011/10/time-input-mask-regexp-powered/包含一些好的逻辑,并且产生了一个几乎完美的正则表达式,可以与regexp掩码绑定以获得所需的行为。不幸的是,在这个表达式中只留下了一个小小的bug,我一直绞尽脑汁而且无法弄明白。表达式如下
/^(([0-1][0-9]|2[0-3]|[0-9])|([0-1][0-9]|2[0-3]|[0-9])(:)[0-5]?[0-9]?)$/
剩下的问题是它允许1:6,因为[0-5]是可选的。如果我试图删除?在[0-5]之后,然后:不再起作用了。非常感谢帮助。我知道这是一个常见的问题,似乎没有任何完美的解决方案。
这是一个演示
的plnkr答案 0 :(得分:0)
如果有人有兴趣,这是答案。
^((([0-1][0-9]|2[0-3]|[0-9])|([0-1][0-9]|2[0-3]|[0-9])(:|h)|([0-1][0-9]|2[0-3]|[0-9])|([0-1][0-9]|2[0-3]|[0-9])(:|h)[0-5][0-9]?))$
答案 1 :(得分:0)
这个简单的怎么样:
^(?:[01]?\d|2[0-3]):[0-5]?\d$
<强>解释强>
The regular expression:
(?-imsx:^(?:[01]?\d|2[0-3]):[0-5]?\d$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
(?: group, but do not capture:
----------------------------------------------------------------------
[01]? any character of: '0', '1' (optional
(matching the most amount possible))
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
2 '2'
----------------------------------------------------------------------
[0-3] any character of: '0' to '3'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
: ':'
----------------------------------------------------------------------
[0-5]? any character of: '0' to '5' (optional
(matching the most amount possible))
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------