2010-01-16 13 views
7

Ich möchte regulären Ausdruck für HH: MM: SS AM/PM hier HH muss nur 1-12 sein, MM muss 60 min, SS wie üblich (60 Sek.) Ich habe es richtig ... ?regulären Ausdruck für die Zeit

+0

Ihre 'HH'-Notation bedeutet, dass die Stunden Null gepolstert sein und von 00 beginnen müssen, aber Sie widersprechen dies später in Ihrer Frage. Was meinst du eigentlich? Können Sie ein wenig präziser sein, vielleicht mit ein paar Beispielen für übereinstimmende und versagende Strings? –

Antwort

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 für Schaltsekunden. Du hast die AM/PM verpasst, aber das ist einfach genug. –

+2

Sprungsekunden passieren in AM und PM abhängig von Ihrer Zeitzone (wenn Sie + GMT sind, passiert es im AM). – mynameiscoffey

+0

brauchen nur am/pm im kleinen Fall. Current it: (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

Elegant! +1 der Kürze halber. –

+0

Unterstützt nicht die in der Frage angegebene HH-Notation, aber er folgt auch, dass mit "HH 1-12 sein muss" wer weiß. Vielleicht möchten Sie auch einen Fall für Schaltsekunden hinzufügen, so selten wie sie sind. – mynameiscoffey

+0

Es kann sicherlich kürzer gemacht werden:/^ ([1-9] | 1 [0-2]) (: [0-5] [0-9]) {2} [AP] M $/aber ich denke es macht es schwerer zu lesen. ;) –

5

Wenn Sie das Zero-Padding als optional sowie Schaltsekunden in der Lage sein:

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

Die Aufteilung:
(0?[1-9]|1[0-2]) 1-9 (mit optionaler führenden Null) oder 10-12
[0-5][0-9] 00-59 (0-5 für erste Ziffer, 0-9 für zweite)
([0-5][0-9])|(60) Schaltsekunden
[AP]M AM/PM

+0

Aktualisiert, danke für den Haken - das ist es, was ich bekomme, um es nicht zuerst zu testen. – mynameiscoffey

+0

sehr schön regexp! – jspcal