Шаблон регулярного выражения для HH: MM: временная строка SS
Я хочу проанализировать строку 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 секунды [ММ: СС]
- Если вы вводите пропуск 20:30:12 с 20 ч, 30 минут и 12 секунд [ЧЧ: ММ: СС]
- Если вы введете 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$)
Кажется, он работает нормально. Я хотел знать любое другое более простое регулярное выражение, которое может выполнить эту работу.
Ответы
Ответ 1
^(?:(?:([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
Ответ 2
@Tim Pietzcker покрывает требование OP для анализатора HH: MM: SS, где SS является обязательным, т.е.
Если вы позволите мне немного отклониться от требования OP и рассмотрите случай, когда HH является обязательным, то есть
Регулярное выражение, которое я придумал, было:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
Позвольте сломать его:
-
([0-1]?\d|2[0-3])
- соответствует часам
-
(?::([0-5]?\d))?
- необязательно соответствует минутам
-
(?::([0-5]?\d))?
- необязательно соответствует секундам