2009-07-27 10 views

Respuesta

17

Esto debería funcionar:

([1-9]|1[012]):[0-5][0-9] 
+0

Esto coincidirá con 0:59. – Brian

+0

Lo corrigí. – Brian

+1

Tenga en cuenta que este coincide con "3:00" en "13:00". – Cide

1

De esta manera: ((?:1[0-2]|0\d)\:(?:[0-5]\d)) si desea 0 a la izquierda de la hora, si no ((?:1[0-2]|\d)\:(?:[0-5]\d)) y ((?:1[0-2]|0?\d)\:(?:[0-5]\d)) hacer si no le importa.

+0

Eso obligaría a un 0 líder ¿no? p.ej. coincidiría con 05:02 pero no con 5:02? – Joe

+0

corrigió eso: desea, no lo hace o no le importa :) –

16

Este es un ejemplo de un problema donde "¡lo sé, usaré expresiones regulares!" es la solución incorrecta. Puede usar una expresión regular para verificar que su formato de entrada sea dígito-dígito-dos-dígito-dígito, luego use la lógica de programación para asegurarse de que los valores estén dentro del rango que espera. Por ejemplo:

/(\d\d?):(\d\d)/ 

if ($1 >= 1 && $1 <= 12 && $2 < 60) { 
    // result is valid 12-hour time 
} 

Esto es mucho más fácil de leer y comprender que algunos de los ejemplos de expresiones regulares ofuscado que se ven en otras respuestas aquí.

+1

O es un ejemplo en el que está completando algo que requiere expresiones regulares ... – Rodger

0

Creo que lo anterior falla al menos de una manera, particularmente con respecto a cadenas como "13:00" (Keith coincide con "3:00" en ese caso).

Éste debería manejar ese problema al igual que los otros que se mencionaron.

([01][0-2]|(?<!1)[0-9]):([0-5][0-9]) 
0
(0?\d|1[0-2]):([0-5]\d) 

que se ajuste a todo, desde las 0:00 hasta 12:59. Eso es 13 horas, por cierto. Si no desea hacer coincidir 0:00 - doce y cincuenta y nueve, probar este lugar:

([1-9]|1[0-2]):([0-5]\d) 
0

podría utilizar este uno:

/((?:1[0-2])|(?:0?[0-9])):([0-5][0-9]) ?([ap]m)/ 

/1 => hour 
/2 => minute 
/3 => am/pm 
0

Los siguientes partidos acolchado y no acolchada horas en un reloj de 24 horas (es decir, 00:00 - 23:59) entre las 00:00 y 12:59.

(?:(?<!\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9] 

Partidos:

  • 00:00
  • 00:58
  • 01:34
  • 1:34
  • 8:35
  • 12:23
  • 12:59

Nonmatches:

  • 13:00
  • 13:23
  • 14:45
  • 23:59
1

qué expresiones regulares?que puede hacer comprobar este entero simples

$str = "12:74"; 
list($h , $m) = explode(":",$str); 
if (($h <=12 && $h >=0 ) && ($m <=59 && $m >=0)) { 
    print "Time Ok."; 
}else{ 
    print "Time not ok"; 
} 
+0

Sí, pero si '$ str' es igual a '" foozah "', romperá tu script (ya que no hay índice 1). Además, si '$ str' es igual a' "foo: zah" ', tu script dirá que * es * un tiempo válido, pero me gusta pensar que no es el caso. –

6
^(00|0[0-9]|1[012]):[0-5][0-9] ?((a|p)m|(A|P)M)$ 

^ - coincidir el comienzo de la cadena.

(00|0[0-9]|1[012]) - cualquier número de dos dígitos hasta 12. Requiere dos dígitos.

: - Unir dos puntos

[0-5][0-9] - Unir cualquier número de dos dígitos de 00 a 59.

? - Unir un espacio cero o una vez.

((a|p)m|(A|P)M) - Empareje am o pm, sin distinción de mayúsculas y minúsculas.

$ - Haga coincidir el final de la cadena.

0

Aquí hay un patrón de 12 horas con validación AM y PM.

TIME12HOURSAMPM_PATTERN = "^(?:(?<!\\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9] ?((a|p)m|(A|P)M)$";

Cuestiones relacionadas