0

我一直在互联网上寻找一种仅进行 12/24 小时时间格式(_ _ : _ _ 没有 AM/PM)验证的方法。要求是它必须主动防止会使时间无效的按键。它还必须接受冒号前不超过 23 的 1 或 2 位数字,并且在不超过 59 的冒号之后需要 2 位数字。

我同时使用了 jquery inputmask 和 maskedinput 都无济于事。无论我尝试什么,它们的行为都不完全正确。

我终于找到了这篇文章http://blog.pierrejeanparra.com/2011/10/time-input-mask-regexp-powered/包含一些很好的逻辑,并产生了一个几乎完美的正则表达式,可以与正则表达式掩码绑定到获得所需的行为。不幸的是,这个表达式中只剩下一个小错误,我一直在绞尽脑汁,无法弄清楚。表达式如下

/^(([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 演示

http://plnkr.co/edit/OE6PGTuCvQa380S7b8Zg?p=preview

4

2 回答 2

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]?))$
于 2013-10-15T20:52:30.010 回答
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
----------------------------------------------------------------------
于 2013-10-16T08:27:49.027 回答