Regex para hora (12 horas con AM/PM)

Usa /^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/ para comprobar que una cadena completa es una hora válida (12 horas con AM/PM). Cada ejemplo de abajo está probado contra el patrón, y puedes abrirlo en el Probador de Regex con las muestras ya cargadas.

Actualizado el

/^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/
Abrir en el Probador de Regex
EntradaResultado
9:30 AM✓ Coincide
12:00pm✓ Coincide
07:15 PM✓ Coincide
13:00 PM✗ No coincide
9:30✗ No coincide
0:30 AM✗ No coincide
9:30 A.M.✗ No coincide

Cómo funciona el patrón

ParteSignificado
(?:0?[1-9]|1[0-2])Horas 1–12, con un cero inicial opcional
:[0-5]\dDos puntos y minutos 00–59
?Espacio opcional
[AaPp][Mm]AM o PM en cualquier combinación de mayúsculas y minúsculas

Ejemplos de código

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;

Notas y limitaciones

En un reloj de 12 horas no existen las 0:00 ni las 13:00, así que ambas se rechazan.

Preguntas frecuentes

¿Cuál es la regex para la hora (12 horas con AM/PM)?
/^(?:0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm]$/ — coincide con la cadena completa. Consulta la tabla de arriba para ver qué hace cada parte.
¿Qué ejemplos coinciden?
De los ejemplos probados, coinciden estos: 9:30 AM, 12:00pm, 07:15 PM. Los demás no.
¿Cómo pruebo esta regex?
Haz clic en “Abrir en el Probador de Regex”: el patrón, los flags y el texto de muestra se cargan automáticamente, y las coincidencias se resaltan mientras editas.