Je veux analyser un hh:mm:ss
chaîne. Un simple est ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
qui attend 2:3:24
ou 02:03:24
chaîne.
Je veux aller plus loin et passer la validation même dans des cas comme
Fondamentalement, si un ":" est trouvé, considérez le numéro avant ":" comme MM et le numéro après ":" comme SS. Si deux ":" sont trouvés, considérez comme HH: MM: SS
Je suis venu avec ce modèle.
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
Cela semble bien fonctionner. Je voulais connaître toute autre expression régulière plus simple, qui pourrait faire l'affaire.
^(?:(?:([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
@Tim Pietzcker couvre l'exigence du PO pour un analyseur HH: MM: SS où SS était obligatoire, c'est-à-dire.
Si vous me permettez de déroger à l'exigence du PO pour un peu, et envisagez un cas où HH est obligatoire, c'est-à-dire.
Le regex que j'ai trouvé était:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
Décomposons-le:
([0-1]?\d|2[0-3])
- correspond pendant des heures(?::([0-5]?\d))?
- correspond éventuellement aux minutes(?::([0-5]?\d))?
- correspond éventuellement à quelques secondes