Подтвердить что ты не робот

Регулярное выражение для соответствия времени в военном (24-часовом) формате

Я хотел бы, чтобы регулярное выражение JavaScript соответствовало времени с использованием 24-часовых часов, где время дается с двоеточием или без него.

Например, я хотел бы совместить время в следующих форматах:

  • 0800
  • 23:45
  • 2345

но это не соответствует недействительным временам, например

  • 34:68
  • 5672
4b9b3361

Ответ 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.

Ответ 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.