Растерный рисунок для HH: MM: SS Time String
-
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 секунды [мм: SS
- Если вы войдете в 20:30:12 пройти с 20 часов, 30 минут и 12 секунд [HH: MM: SS
- Если вы входите 78:12, не проходите 78 минут - это неправильно ....
По сути, если один ":" найдено, рассмотрите число раньше ":" как 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
- ММ: СС
- SS
Если вы позволите мне немного отклониться от требований OP и рассмотрите случай, когда HH является обязательным, т.е.
- HH
- HH: мм
- 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))?
- По желанию совпадает за секунды