时间格式验证正则表达式,军事或AM / PM,但不是两者

时间:2015-04-30 09:08:38

标签: javascript regex time-format

我在这里有这个正则表达式:

^(\d{1,2}):(\d{2})(:00)?(\s)?(AM|PM|am|pm)?$

它做得很好。允许使用23:00:0012:00 AM1:00am等内容。

问题是它还允许像23:24 AM这样的东西。

如果第一组数字是>,修改此内容或将其附加到禁止AM / PM的最佳方法是什么? 12?

2 个答案:

答案 0 :(得分:2)

尝试使用:

^(?:(?:(?:0?\d|1[012]):[0-5]\d(?::00)? ?[ap]m)|(?:[01]?\d|2[0-3]):[0-5]\d(?::00)?)$

<强>解释

^
(?:                 : start non capturing group
  (?:               : start non capturing group
    (?:             : start non capturing group
      0?\d          : matches optional 0 followed by 1 digit
      |             : OR
      1[012]        : 1 followed by digit between 0 and 2
    )               : end group
    :               : literally :
    [0-5]\d         : digit between 0 and 5 followed by any digit
    (?::00)?        : optional 00 seconds
     ?              : optional space
    [ap]m           : am or pm
  )                 : end group 
  |                 : OR
  (?:               : start non capturing group
   [01]?\d          : 0 or 1 (optional) followed by any digit
   |                : OR
   2[0-3]           : 20 to 23
  )                 : end group
  :                 : literally :
  [0-5]\d           : digit between 0 and 5 followed by any digit
  (?::00)?          : optional 00 seconds
)                   : end group
$                   

答案 1 :(得分:1)

我试图解决这个问题:

^((0?[0-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))?)\s?([ap]m)?|([0-1][0-9]|[2][0-3]):([0-5][0-9])(?::([0-5][0-9]))?$

JS:

var re = /^((0?[0-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))?)\s?([ap]m)?|([0-1][0-9]|[2][0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/gmi; 

请参阅demo

注意使用i选项(以启用不区分大小写的匹配)和m来匹配整行。

这个正则表达式允许分钟和秒(秒是可选的)。