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.

Haga clic en Upvote
fuente
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]$
Peter O.
fuente
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

Niket Pathak
fuente
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)

Tomer
fuente
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])?$
Bahman Khalafi
fuente
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]$
Nikhil Rawat
fuente
¿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]$
usuario3229770
fuente
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

Ved
fuente
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])$
Pedram Ahmadpour
fuente
¿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í.

gdmanandamohon
fuente
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]$
Basavaraj
fuente
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.

usuario3481495
fuente
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.

Bob Light
fuente
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]$
TobiasDeVil
fuente
-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.


fuente
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
Manish M Demblani
fuente
-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

pythonian29033
fuente
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.

JaredPar
fuente
-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.

Shekhar
fuente