Регулярное выражение для соответствия времени в военном (24-часовом) формате
Я хотел бы, чтобы регулярное выражение JavaScript соответствовало времени с использованием 24-часовых часов, где время дается с двоеточием или без него.
Например, я хотел бы совместить время в следующих форматах:
но это не соответствует недействительным временам, например
Ответы
Ответ 1
Это должно сделать это:
^([01]\d|2[0-3]):?([0-5]\d)$
Выражение гласит:
^ Start of string (anchor)
( begin capturing group
[01] a "0" or "1"
\d any digit
| or
2[0-3] "2" followed by a character between 0 and 3 inclusive
) end capturing group
:? optional colon
( start capturing
[0-5] character between 0 and 5
\d digit
) end group
$ end of string anchor
Ответ 2
/(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23):?(0|1|2|3|4|5)\d/
:)
Ответ 3
Вот лучшее решение, чем верхняя часть выше для военных плюс гражданское решение.
Военные
^(((([0-1][0-9])|(2[0-3])):?[0-5][0-9])|(24:?00))
Я считаю, что или в наивысшем рейтинге ответ неправильно обрабатывает подмножества до и после без дополнительного набора скобок для их группировки. Кроме того, я не уверен, что \d
просто 0-9
во всех итерациях. Он технически включает специальный [[:digit:]]
, хотя я никогда не занимался тем, что был проблемой раньше. Любые способы, это должно обеспечить все, включая кроссовер 2400/24: 00
Гражданский
^([0-9]|([1][0-2])):[0-5][0-9][[:space:]]?([ap][m]?|[AP][M]?)
Это приятная гражданская версия, которая позволяет использовать весь диапазон в формате 12:30, 12:30, 12:30, 12:30, 12:30, 12:30 P, 12:30 или 12: 30 p, но для того, чтобы оба были включены (без Am или pM), требуется знак утреннего или последующего меридиана.
Я использую оба из них в JavaScript для проверки временных строк.
Ответ 4
Чтобы сохранить опцию двоеточия и разрешить все допустимые времена:
([01]\d|2[0-3]):?[0-5]\d
Обратите внимание, что это предполагает, что полночь всегда будет 0000 и никогда не будет 2400.
Ответ 5
Вот сообщение в блоге, ищущее то же самое и кучу потенциальных ответов - большинство из которых не работают, но есть хорошая дискуссия о том, почему каждый не удается.
Конечно, явно длинный и точный всегда есть возможность!
Ответ 6
Это тот, который я только что придумал:
(^ ((2 [0-4]) | ([01] [0-9])): [0-5] [0-9] $) | (^ ((1 [0-2 ]) | (0 [1-9]) (?:? [0-5] [0-9])) [год] м $)
Принимает:
2 вечера
4:30 утра
7:05 утра
18:45
6:19
00:55
не принимает "00:05 утра" - я не уверен, есть ли время "0am"
Если вы считаете, что ":" является необязательным для 24-часового формата (военный) - просто добавьте знак вопроса после него
Ответ 7
Я знаю, что это старый вопрос, но здесь появилось регулярное выражение, с которым, похоже, работает.
^(([[0|1]\d)|(2[0-3]))[:]?([0-5]\d)$
Вы можете отредактировать его на этом сайте regex
Edit
Я просто понял, что этот ответ оказался таким же, как и принятый ответ, но я оставлю его здесь, по крайней мере, для ссылки "сделай сам"
Ответ 8
Это идеально: ^ 0? ([0-9] [0-2]?): [0-5] [0-9] $
Примечание: только 12 часов часов
Для Times like: 0: 01- 12:59
или
00:01 - 12:59
Ответ 9
/^(?:[01]\d|2[0-3]):?[0-5]\d$/
Ответ 10
Я не думаю, что регулярное выражение является правильным решением для этой проблемы. Конечно, это МОЖНО быть сделано, но это просто кажется неправильным.
Убедитесь, что ваша строка имеет длину четыре символа или 5 символов с двоеточием в середине. Затем проанализируйте каждую сторону и убедитесь, что левая сторона меньше 24, а правая - меньше 60.
Решение regex намного сложнее.
Ответ 11
Удалите ':'
, если строка имеет один, тогда, если строка имеет форму "DDDD"
, преобразуйте ее в int
и сравните ее с 2400.