Шаблон регулярного выражения для HH: MM: SS time string
Я хочу разобрать hh:mm:ss
строку.
Простой является ([0-1]?d|2[0-3]):([0-5]?d):([0-5]?d)
что ожидает 2:3:24
или 02:03:24
строку.
Я хочу сделать еще один шаг и пройти проверку даже в таких случаях, как
- если вы введете 56, следует пройти, а 56 можно считать 56 секунд [СС]
- если вы вводите 2:3 или 02:03 или 02:3 или 2: 03 он должен пройти. 2 минуты и 3 секунды [MM: SS]
- если вы вводите 20:30: 12 проход с 20 часов, 30 минут и 12 секунд [чч:мм:СС]
- если вы вводите 78: 12, не проходите 78 минут неправильно....
в основном, если один": "найден, рассмотрим число перед ": "как мм и число после ": "как 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 ответов
^(?:(?:([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, где 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))?
- необязательно соответствует секундам