HH的正则表达式模式:MM:SS时间字符串

时间:2011-11-29 21:51:39

标签: regex expression hour seconds minute

我想解析一个hh:mm:ss字符串。 一个简单的([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d),需要2:3:2402:03:24字符串。

我想更进一步,即使在像

这样的情况下也要通过验证
  1. 如果你只输入56,它应该通过,因为56可以被认为是56秒[SS]
  2. 如果您输入2:3或02:03或02:3或2:03则应该通过。 2分3秒[MM:SS]
  3. 如果你进入20:30:12通过20小时30分12秒[HH:MM:SS]
  4. 如果你输入78:12,不要过78分钟是错误的....
  5. 基本上,如果找到一个“:”,则将“:”之前的数字视为MM,将“:”之后的数字视为SS 。如果发现两个“:”,则认为是HH:MM:SS

    我想出了这种模式。

    (^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
    

    似乎工作正常。我想知道任何其他更简单的正则表达式,它可以完成这项工作。

2 个答案:

答案 0 :(得分:110)

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$

<强>解释

^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string

答案 1 :(得分:6)

@Tim Pietzcker涵盖OP对HH:MM:SS解析器的要求,其中SS是强制性的,即

  • HH:MM:SS
  • MM:SS
  • SS

如果您允许我偏离OP的要求,并考虑HH是强制性的情况,即

  • HH
  • HH:MM
  • HH:MM:SS

我想出的正则表达式是:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$

让我们分解一下:

  • ([0-1]?\d|2[0-3]) - 匹配数小时
  • (?::([0-5]?\d))? - 可选择匹配分钟
  • (?::([0-5]?\d))? - 可选择匹配秒数