HH:MM:SS时间string的正则expression式模式
我想parsing一个hh:mm:ss
string。 简单的是([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
其中2:3:24
或02:03:24
string。
我想更进一步,并通过validation,即使在像
- 如果你只input56,那应该是通过的,因为56可以被认为是56秒[SS]
- 如果您input2:3或02:03或02:3或2:03,则应通过。 2分3秒[MM:SS]
- 如果你进入20:30:12,20小时30分12秒[HH:MM:SS]
- 如果你input78:12,不通过78分钟是错误的….
基本上,如果find一个“:”,把“:”之前的数字看作是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$)
它似乎工作正常。 我想知道任何其他更简单的正则expression式,可以做这个工作。
^(?:(?:([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
@Tim Pietzcker涵盖了OP对HH:MM:SSparsing器的要求,其中SS是强制的,即
- HH:MM:SS
- MM:SS
- SS
如果你允许我稍微偏离OP的要求,并考虑HH是强制性的情况,
- HH
- HH:MM
- HH:MM:SS
我提出的正则expression式是:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
让我们来分解一下:
-
([0-1]?\d|2[0-3])
– 可以匹配几个小时 -
(?::([0-5]?\d))?
– 可选的匹配分钟 -
(?::([0-5]?\d))?
– 可选地匹配秒