Регулярний вираз для відповідності формату HH: MM часу


165

Я хочу regexp для відповідності часу у форматі HH: MM. Ось що я маю, і це працює:

^[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] $?
Мартін

57

Регулярні вирази для часу

  • HH: MM 12-годинний формат, необов'язково ведучий 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: 12-годинний формат MM, необов'язковий ведучий 0, обов'язкові меридієми (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 години на ведучому 0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: формат 24-годинного формату MM, додатково ведучий 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: 24-годинний формат SS із провідним 0

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

Довідка та демонстрація


4
Дякую! Ця відповідь повинна бути вгорі.
Марк

Будь-яка причина HH: MM 24 години з провідними 0 ні ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Маковей Влад

Тому що регулярний вираз у відповіді працює добре. І той, кого ви коментували, теж працює. Сміливо користуйтеся будь-яким із них. :)
Niket Pathak

Для людей, які співпадають з 12 годин (з ам / п.) Рядків із вищевказаним регулярним виразом, майте на увазі, що тестування "13:00 вечора" на регулярний вираз повернеться істинним (деякі значення), оскільки частина "3:00 вечора" в рядку є дійсний. Я вирішив проблему, скориставшись наступним, якщо оператор res = value.match (regex); if (res && res [0] === значення) doSomething ();
Taha Rehman Siddiqui

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]працює так само добре;)
Czechnology

3
Ось ця відповідь переглянута, щоб прийняти лише 12 годинний час (включаючи додаткові ведучі нулі):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

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


4

Найкраще було б для НН: ММ, не беручи на себе ніякого ризику.

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

можна це скоротити ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought

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
02:59
02: 9
02:09
02: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

Декларуйте

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", коли String збігається з регулярним виразом.


0

Невелика зміна внеску Manish M Demblani вище, ніж 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:00 4:00 4:00 4:00 ранку 4:30 ранку тощо.


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

0

Згенерований нижче графік допоможе перевірити формат hh: mm

^([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
  • 07:43
  • 19:00
  • 18:23

І не відповідає жодному недійсному екземпляру, наприклад 25:76 тощо.


09:30не відповідають
Зелений

Ваші власні приклади 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])$

Примітка. Я припускав движок jage regex. Якщо це не так, будь ласка, повідомте мене про це.


-3

Ви можете використовувати наступний регулярний вираз:

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

Єдина модифікація, яку я вніс, є лівою лівою цифрою, необов'язково. Решта виразів однакова.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.