Regex для времени (12-часовой формат с AM/PM)

Используйте /^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/, чтобы проверить, что вся строка является корректным временем в 12-часовом формате с AM/PM. Каждый пример ниже проверен по этому шаблону, а сам пример можно открыть в Regex Tester с предзагруженными образцами.

Обновлено

/^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/
Открыть в Regex Tester
ВводРезультат
9:30 AM✓ Совпадение
12:00pm✓ Совпадение
07:15 PM✓ Совпадение
13:00 PM✗ Нет совпадения
9:30✗ Нет совпадения
0:30 AM✗ Нет совпадения
9:30 A.M.✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
(?:0?[1-9]|1[0-2])Часы от 1 до 12, с необязательным ведущим нулём
:[0-5]\dДвоеточие и минуты от 00 до 59
?Необязательный пробел
[AaPp][Mm]AM или PM в любом регистре

Примеры кода

JavaScript

const re = /^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]', value))

PHP

preg_match('/^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/', $value) === 1;

Примечания и ограничения

На 12-часовых часах не бывает 0:00 или 13:00, поэтому оба значения отклоняются.

Часто задаваемые вопросы

Какое регулярное выражение для времени в формате 12 часов с AM/PM?
/^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/ — шаблон проверяет всю строку целиком. Что делает каждая часть, см. в таблице выше.
Какие примеры подходят?
Из проверенных примеров подходят: 9:30 AM, 12:00pm, 07:15 PM. Остальные не подходят.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и тестовый текст загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.