Regex -Muster für HH: MM: SS -Zeitzeichenfolge
-
25-10-2019 - |
Frage
Ich möchte a analysieren hh:mm:ss
Saite. Ein einfaches ist ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
was erwartet 2:3:24
oder 02:03:24
Saite.
Ich möchte es noch einen Schritt weiter gehen und die Validierung auch in Fällen wie übergeben
- Wenn Sie nur 56 eingeben, sollte es bestanden werden, da 56 als 56 Sekunden angesehen werden können.
- Wenn Sie 2: 3 oder 02:03 oder 02: 3 oder 2:03 eingeben, sollte es passieren. 2 Minuten und 3 Sekunden [MM: SS
- Wenn Sie 20:30:12 mit 20 Stunden, 30 Minuten und 12 Sekunden lang teilnehmen [HH: MM: SS
- Wenn Sie 78:12 eingeben, bestehen Sie nicht 78 Minuten. Es ist falsch ....
Grundsätzlich, wenn einer ":" gefunden wird, überlegen Sie die Nummer vorher ":" als MM und Nummer nach ":" als SS. Wenn zwei ":" werden als HH: MM: SS betrachtet
Ich habe dieses Muster ausgedacht.
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
Es scheint gut zu funktionieren. Ich wollte einen anderen einfacheren regulären Ausdruck kennen, der den Job erledigen kann.
Lösung
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
Erläuterung:
^ # Start of string
(?: # Try to match...
(?: # Try to match...
([01]?\d|2[0-3]): # HH:
)? # (optionally).
([0-5]?\d): # MM: (required)
)? # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d) # SS (required)
$ # End of string
Andere Tipps
@Tim Pietzcker deckt die OP -Anforderung für einen HH: MM: SS -Parser ab, bei dem SS obligatorisch war, dh
- HH: MM: SS
- MM: SS
- Ss
Wenn Sie es mir erlauben, ein wenig von der OP -Anforderung abzuweichen und einen Fall in Betracht zu ziehen, in dem HH obligatorisch ist, dh dh
- HH
- HH: MM
- HH: MM: SS
Die Regex, die ich mir ausgedacht habe, war:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
Lassen Sie es uns aufschlüsseln:
([0-1]?\d|2[0-3])
- Übereinstimmungen stundenlang(?::([0-5]?\d))?
- optional übereinstimmt Minuten(?::([0-5]?\d))?
- optional übereinstimmt Sekunden