Expresión regular para hacer coincidir el formato de hora HH: MM


166

Quiero una expresión regular para el tiempo de coincidencia en formato HH: MM. Esto es lo que tengo, y funciona:

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

Esto coincide con todo de 00:00 a 23:59.

Sin embargo, quiero cambiarlo para que también coincidan 0:00 y 1:00, etc., así como 00:00 y 01:30. Es decir, hacer que el dígito más a la izquierda sea opcional, para que coincida con HH: MM y H: MM.

¿Alguna idea de cómo hacer ese cambio? Necesito que esto funcione en javascript y php.


15
En realidad, su expresión original no coincidirá con un rango completo de valores de tiempo válidos, por ejemplo, 17:00
David Clarke

Respuestas:


366

Su expresión regular original tiene fallas: 04:00por ejemplo, no coincidiría .

Esto puede funcionar mejor:

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

45
Este regExp es por tiempo sin cero a la izquierda. RegExp para el tiempo con cero a la ^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
izquierda

15
@SergO por favor lea su respuesta más cuidadosamente. Su respuesta es tanto para un cero inicial como para fuera.
Alexander

11
Una forma ligeramente más corta es^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
Funciona bien en C # también.
Richard Ev

10
@SergO no debería ser ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

Expresiones regulares por tiempo

  • HH: formato MM de 12 horas, 0 inicial opcional

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: formato MM de 12 horas, 0 inicial opcional, meridiems obligatorios (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 horas con 0 inicial

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: formato MM 24 horas, opcional con 0 inicial

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: formato SS de 24 horas con 0 inicial

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

Referencia y demostración


44
¡Gracias! Esta respuesta debería estar en la parte superior.
Marc

¿Alguna razón HH: MM 24 horas con 0 a la izquierda no lo es ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei

Porque la expresión regular en la respuesta funciona bien. Y el que comentaste también funciona. Siéntase libre de usar cualquiera de ellos. :)
Niket Pathak

Para las personas que combinan cadenas de 12 horas (con am / pm) con la expresión regular anterior, tenga en cuenta que probar "13:00 PM" contra la expresión regular devolverá verdadero (algunos valores) porque la parte "3:00 PM" en la cadena es válido. Resolví el problema usando la siguiente instrucción if let res = value.match (regex); if (res && res [0] === valor) doSomething ();
Taha Rehman Siddiqui

49

Nada de lo anterior funcionó para mí. Al final usé:

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

Lógica:

El primer número (horas) es: un número entre 0 y 19 -> [0-1]?[0-9](que permite un número de un solo dígito)
o
un número entre 20 - 23 ->2[0-3]

el segundo número (minutos) siempre es un número entre 00 y 59 -> [0-5][0-9](sin permitir un solo dígito)


8
No necesita el tablero en el primer corchete, [01]funciona igual de bien;)
Czechnology

3
Aquí está esta respuesta revisada para aceptar solo 12 horas (incluidos los ceros ^(0?[1-9]|1[0-2]):[0-5][0-9]$
iniciales

^([0-1][0-9]|2[0-3]):[0-5][0-9]$forzar un cero a la
izquierda

8

Puedes usar este 24H, los segundos son opcionales

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

4

Lo mejor sería para HH: MM sin correr ningún riesgo.

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

¿Podría esto ser acortado ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought

3

Sorprendentemente, descubrí que en realidad todo esto no lo cubre, ya que no funcionan para la medianoche en formato más corto de 0: 0 y algunos tampoco funcionan para las 00:00, utilicé y probé lo siguiente:

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

2

Puedes usar esta expresión regular:

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

Si desea excluir 00:00, puede usar esta expresión

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

La segunda expresión es una mejor opción porque el tiempo válido es de 00:01 a 00:59 o de 0:01 a 23:59. Puede usar cualquiera de estos según sus necesidades. Enlace Regex101


La primera expresión no acepta 00: 05 . Pero gracias. Me lleva a la validación que estaba buscando.
JazZ

2

Partidos:

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

Úselo:

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

¿Qué tipo de tiempo es 2: 9 o 02: 9?
vs97

Por ejemplo, en C # hay muchas opciones para convertir el objeto DateTime en una cadena. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . para más información ver enlace
Pedram Ahmadpour

1

Como pediste el bit más a la izquierda opcional, también he hecho el más a la izquierda y el más a la derecha opcional, échale un vistazo

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

Coincide con

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

El enlace en vivo está disponible aquí.


0

Puede usar la siguiente expresión regular:

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

0

Declarar

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();
}

Este método devuelve "verdadero" cuando la cadena coincide con la expresión regular.


0

Una ligera modificación a la contribución de Manish M Demblani anterior maneja 4am (me deshice de la sección de segundos ya que no la necesito en mi aplicación)

^(([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]))$

manijas: 4am 4 am 4:00 4:00 am 4:00 pm 4.30 am etc.


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
Ed Morton

0

La expresión regular a continuación ayudará a validar el formato hh: mm

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

-1

El mio es:

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

Esto es mucho mas corto

Lo probé con varios ejemplos

Partido:

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

Y no coincide con ninguna instancia no válida, como 25:76, etc.


09:30no coinciden
Verde

Sus propios ejemplos 00:00 y 07:43 no coinciden.
Christiaan Westerbeek

-1

Puedes probar lo siguiente

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

Puede detectar los siguientes patrones:

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

revise esta expresión regular maestra del detector de marca de tiempo que construí para buscar una marca de tiempo especificada por el usuario, ejemplos de lo que recogerá, pero definitivamente NO se limita a;

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

También recogerá muchos más, siempre que los tiempos incluyan dígitos


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Ni siquiera puedo verlo ...: - /
Martin Tournoij

-3

Intenta lo siguiente

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

Nota: Estaba asumiendo el motor de JavaScript regex. Si es diferente a eso, házmelo saber.


-3

Puede usar la siguiente expresión regular:

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

La única modificación que hice es que el dígito más a la izquierda es opcional. El resto de la expresión regular es igual.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.