HH:MM:SS时间字符串
-
25-10-2019 - |
题
我想解析 hh:mm:ss
细绳。一个简单的是 ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
期望 2:3:24
或者 02:03:24
细绳。
我想进一步迈出一步,即使在诸如此类的情况下也可以通过验证
- 如果您只输入56,则应该通过,因为56可以将其视为56秒[SS
- 如果输入2:3或02:03或02:3或2:03,则应该通过。 2分3秒[mm:SS
- 如果您输入20:30:12的通行证20小时,30分钟和12秒[HH:MM:SS
- 如果您输入78:12,请不要通过78分钟是错误的。
基本上,如果找到一个“:”,请在“ mm”和“ 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$)
似乎工作正常。我想知道可以完成这项工作的其他任何简单的正则表达式。
解决方案
^(?:(?:([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:SS Parser,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))?
- 可选匹配秒
不隶属于 StackOverflow