Регулярное выражение для соответствия формату времени ЧЧ: ММ


166

Я хочу регулярное выражение для сопоставления времени в формате ЧЧ: ММ. Вот что у меня есть, и это работает:

^[0-2][0-3]:[0-5][0-9]$

Это соответствует всему с 00:00 до 23:59.

Тем не менее, я хочу изменить это так, чтобы 0:00 и 1:00, и т. Д. Также соответствовали, а также 00:00 и 01:30. Т.е. сделать крайнюю левую цифру необязательной, чтобы она соответствовала HH: MM и H: MM.

Есть идеи, как сделать это изменение? Мне нужно это для работы в JavaScript, а также PHP.


15
На самом деле ваше оригинальное регулярное выражение не будет соответствовать целому диапазону допустимых значений времени, например, 17:00
Дэвид Кларк,

Ответы:


366

Ваше оригинальное регулярное выражение имеет недостатки: например, оно не будет соответствовать 04:00.

Это может работать лучше:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$

45
Это regExp для времени без нуля в начале. RegExp для времени с ведущим нулем^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@ SergO, пожалуйста, прочитайте его ответ более внимательно. Его ответ как для ведущего нуля, так и без него.
Александр

11
Немного короче форма^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Билли Джо

2
Хорошо работает и в C #.
Ричард Эв

10
@SergO не должно быть ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Мартин

58

Регулярные выражения для времени

  • ЧЧ: ММ 12-часовой формат, необязательный ведущий 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • ЧЧ: MM 12-часовой формат, необязательный начальный 0, обязательные меридиемы (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • ЧЧ: ММ 24 часа с ведущим 0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • ЧЧ: ММ 24-часовой формат, необязательный ведущий 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • ЧЧ: ММ: СС 24-часовой формат с лидирующим 0

    /(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/

Ссылка и Демо


4
Спасибо! Этот ответ должен быть наверху.
Марк

Любая причина ЧЧ: ММ 24-часовой с ведущим 0 нет ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Влад Маковей

Потому что регулярное выражение в ответе работает хорошо. И тот, который вы прокомментировали, тоже работает. Не стесняйтесь использовать любой из них. :)
Никет Патхак

Для людей, которые соответствуют 12-часовым (с am / pm) строкам с приведенным выше регулярным выражением, имейте в виду, что тестирование «13:00 PM» для регулярного выражения вернет true (некоторые значения), поскольку часть «3:00 PM» в строке действительный. Я решил проблему с помощью следующего оператора if let res = value.match (regex); if (res && res [0] === value) doSomething ();
Таха Рехман Сиддики

49

Ничто из вышеперечисленного не помогло мне. В конце концов я использовал:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)

Логика:

Первое число (часы): либо число от 0 до 19 -> [0-1]?[0-9](допускается однозначное число),
либо
число от 20 до 23 ->2[0-3]

второе число (минуты) всегда является числом от 00 до 59 -> [0-5][0-9](не допускается ни одна цифра)


8
Вам не нужна черта в первой квадратной скобке, [01]работает точно так же;)
Czechchnology

3
Вот этот ответ, пересмотренный, чтобы принять только 12-часовое время (включая дополнительные ^(0?[1-9]|1[0-2]):[0-5][0-9]$
начальные

^([0-1][0-9]|2[0-3]):[0-5][0-9]$заставить ведущий ноль
Манан Мехта

8

Вы можете использовать это 24 часа, секунды не являются обязательными

^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?$


3

Удивительно, но я обнаружил, что на самом деле все это не совсем подходит, так как они не работают для более короткого формата полуночи 0: 0, а некоторые не работают и для 00:00, я использовал и протестировал следующее:

^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$

2

Вы можете использовать это регулярное выражение:

^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$

Если вы хотите исключить 00:00, вы можете использовать это выражение

^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$

Второе выражение - лучший вариант, потому что допустимое время от 00:01 до 00:59 или от 0:01 до 23:59. Вы можете использовать любой из них по вашему требованию. Regex101 ссылка


Первое выражение не принимает 00: 05 . Но спасибо. Приводит меня к проверке, которую я искал.
JazZ

2

Спички:

2: 9
2:09
2:59
02: 9
2:09
2:59
23:59

Используй это:

^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9])$

какое время 2: 9 или 02: 9?
vs97

например, в C # есть так много опций для преобразования объекта DateTime в строку. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 , для получения дополнительной информации см. ссылку
Педрам Ахмадпур

1

Как вы спросили, самый левый необязательный бит, я сделал самый левый и самый правый бит тоже необязательно, проверьте это

^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]?$

Это совпадает с

0:0 
00:00
00:0 
0:00
23:59
01:00
00:59

Прямая ссылка доступна здесь


0

Вы можете использовать следующее регулярное выражение:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

0

Declare

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

Этот метод возвращает "true", когда строка соответствует регулярному выражению.


0

Небольшое изменение вклада Маниша М. Демблани, описанное выше, касается 4 утра (я избавился от секции секунд, так как она мне не нужна в моем приложении)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

ручки: 4 утра 4 утра 4:00 4:00 утра 4:00 вечера 4:30 утра и т. д.


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
Эд Мортон

0

Следующее регулярное выражение поможет проверить формат чч: мм

^([0-1][0-9]|2[0-3]):[0-5][0-9]$

-1

Мой это:

^(1?[0-9]|2[0-3]):[0-5][0-9]$

Это намного короче

Испытано на нескольких примерах

Соответствие:

  • 00:00
  • 7:43
  • 7:43
  • 19:00
  • 18:23

И не соответствует ни одному недействительному экземпляру, такому как 25:76 и т. Д.


09:30не совпадают
Green

Ваши собственные примеры 00:00 и 07:43 не совпадают.
Кристиан

-1

Вы можете попробовать следующее

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

Он может обнаружить следующие шаблоны:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

-1

проверьте это регулярное регулярное выражение детектора меток времени, которое я построил, чтобы найти указанную пользователем метку времени, примеры того, что она будет получать, но, безусловно, НЕ ограничивается;

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

Это также подхватит намного больше, пока времена включают цифры


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Я даже не вижу этого ...: - /
Мартин Турной

-3

Попробуйте следующее

^([0-2][0-3]:[0-5][0-9])|(0?[0-9]:[0-5][0-9])$

Примечание: я предполагал, что движок javascript regex. Если это не так, пожалуйста, дайте мне знать.


-3

Вы можете использовать следующее регулярное выражение:

^[0-2]?[0-3]:[0-5][0-9]$

Только изменение, которое я сделал, является самой левой цифрой, является дополнительным. Остальная часть регулярного выражения такая же.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.