modèle regex pour HH: MM: Chaîne de temps SS
-
25-10-2019 - |
Question
Je veux analyser une chaîne de hh:mm:ss
.
Un simple est ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
qui attend la chaîne de 2:3:24
ou 02:03:24
.
Je veux prendre un peu plus loin et passer la validation même dans des cas comme
- si vous entrez seulement 56, il devrait être passe, 56 peut être considéré comme 56 secondes [SS]
- si vous entrez 2: 3 ou 2h03 ou 02: 3 ou 2:03, il doit passer. 2 minutes et 3 secondes [MM: SS]
- Si vous entrez 20:30:12 passe avec 20 heures, 30 minutes et 12 secondes [HH: MM: SS]
- si vous entrez 78:12, ne passe pas 78 minutes est mal ....
En fait, si l'on « : » se trouve, le nombre considérer avant de « : » comme MM et le nombre après « : » en tant que SS . Si deux ":" se trouvent considérer comme HH: MM: SS
Je suis venu avec ce schéma.
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
Il semble fonctionner très bien. Je voulais savoir toute autre expression régulière plus simple, qui peut faire le travail.
La solution
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
Explication:
^ # 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
Autres conseils
Pietzcker couvre l'@ Tim exigence de l'OP pour une HH: MM: SS analyseur où SS était obligatoire, à savoir
- HH: MM: SS
- MM: SS
- SS
Si vous me permettre de déroger à l'exigence de l'OP pour un peu, et d'envisager un cas où HH est obligatoire, i.e..
- HH
- HH: MM
- HH: MM: SS
Le regex je suis venu avec était:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
pause Let vers le bas:
-
([0-1]?\d|2[0-3])
- allumettes pendant des heures -
(?::([0-5]?\d))?
- correspond en option pour les minutes -
(?::([0-5]?\d))?
- correspond en option pour les secondes