2010-01-16 20 views
7

Voglio un'espressione regolare per HH: MM: SS AM/PM qui HH deve essere solo 1-12, MM deve 60 min, SS come al solito (60 sec.) Qualcuno lo ha correttamente ... ?espressione regolare per tempo

+0

La notazione 'HH' implica che le ore devono essere riempite a zero e iniziare da 00, tuttavia lo si contraddice più avanti nella domanda. Cosa intendi veramente? Puoi essere un po 'più preciso, magari con alcuni esempi di stringhe corrispondenti e non riuscite? –

risposta

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 per secondi bisestili. Hai perso l'AM/PM, ma è abbastanza facile. –

+2

I secondi di salto si verificano sia in AM che in PM a seconda del fuso orario (se si è + GMT avviene nell'AM). – mynameiscoffey

+0

necessitano solo di am/pm in minuscolo. Corrispondilo: (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 per brevità. –

+0

Non supporta la notazione HH fornita nella domanda, anche se segue anche che con "HH deve essere 1-12" quindi chi lo sa. Potrebbe anche voler aggiungere un caso per secondi bisestili, per quanto rari. – mynameiscoffey

+0

Può essere reso più breve:/^ ([1-9] | 1 [0-2]) (: [0-5] [0-9]) {2} [AP] M $/ma penso che rende più difficile leggere. ;) –

5

Se si vuole essere in grado di avere l'imbottitura zero optional così come secondo salto:

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

La ripartizione:
(0?[1-9]|1[0-2]) 1-9 (opzionale zero) o 10-12
[0-5][0-9] 00-59 (0-5 per la prima cifra, 0-9 per la seconda)
([0-5][0-9])|(60) secondi di salto
[AP]M AM/PM

+0

Aggiornato, grazie per la cattura - questo è quello che ottengo per non provarlo prima. – mynameiscoffey

+0

regexp molto bello! – jspcal