2010-01-16 85 views
7

Quiero expresión regular para HH: MM: SS AM/PM aquí HH debe ser 1-12 solamente, MM debe 60 min, SS como de costumbre (60 seg.) Tengo cualquiera correctamente ... ?expresión regular por tiempo

+0

Su notación 'HH' implica que las horas deben ser acolchadas con cero y comenzar desde 00, sin embargo, usted contradice esto más adelante en su pregunta. ¿Qué quieres decir? ¿Puede ser un poco más preciso, quizás con algunos ejemplos de cadenas coincidentes y fallidas? –

Respuesta

12
(0[1-9]|1[0-2]):([0-5][0-9]:[0-5][0-9]|(59|44|29):60) (AM|am|PM|pm) 
+2

+1 por segundos intercalares. Te perdiste el AM/PM, pero eso es bastante fácil. –

+2

Los segundos interminables suceden tanto en AM como en PM, según su zona horaria (si es + GMT ocurre en AM). – mynameiscoffey

+0

solo necesita am/pm en caso pequeño Curríquelo: (0 [1-9] | 1 [0-2]): ([0-5] [0-9]): ([0-5] [0 -9] | 60) (AM | PM | am | pm) –

8
/^([1-9]|10|11|12):[0-5][0-9]:[0-5][0-9] [AP]M$/ 
+0

Elegante! +1 por brevedad. –

+0

No es compatible con la notación HH dada en la pregunta, aunque él también sigue eso con "HH debe ser 1-12" así que quién sabe. También es posible que desee agregar un caso de segundos intercalares, tan raros como son. – mynameiscoffey

+0

Sin duda se puede acortar:/^ ([1-9] | 1 [0-2]) (: [0-5] [0-9]) {2} [AP] M $/pero creo que hace que sea más difícil de leer. ;) –

5

Si usted quiere ser capaz de tener el relleno de ceros como opcionales, así como los segundos intercalares:

/^((0?[1-9])|(1[0-2])):[0-5]\d:(([0-5]\d)|(60)) [AP]M$/ 

El desglose:
(0?[1-9]|1[0-2]) 1-9 (con la opción de cero) o 10-12
[0-5][0-9] 00-59 (0-5 para el primer dígito, 0-9 para el segundo)
([0-5][0-9])|(60) Segundos de salto
[AP]M AM/PM

+0

Actualizado, gracias por la captura; eso es lo que obtengo por no probarlo primero. – mynameiscoffey

+0

muy buena expresión regular! – jspcal