Motif Regex pour HH: MM: SS chaîne de temps
je veux analyser un hh:mm:ss
chaîne de caractères.
Un simple ([0-1]?d|2[0-3]):([0-5]?d):([0-5]?d)
qui attend 2:3:24
ou 02:03:24
chaîne de caractères.
je veux aller plus loin, et passer les validation, même dans des cas comme
- si vous entrez seulement 56, il convient de passer, comme 56 peut être considéré comme 56 secondes [SS]
- si vous saisissez 2:3 ou 02:03 ou 02:3 ou 2:03 il doit passer. 2 minutes et 3 secondes [MM:SS]
- si vous entrez 20:30:12 passer avec 20 heures, 30 minutes et 12 secondes [HH:MM: SS]
- si vous entrez 78: 12, ne passez pas 78 minutes est erroné....
fondamentalement, si un ": "est trouvé, considérer le nombre avant ": "comme MM et le nombre après": "comme SS . Si deux ":" trouvé d'envisager sous la forme HH:MM:SS
j'ai trouvé 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 correctement. Je voulais connaître n'importe quelle autre expression plus simple, qui peut faire le travail.
2 réponses
^(?:(?:([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 de L'OP pour un HH:MM: SS parser où SS était obligatoire, i.e.
- HH: MM: SS
- MM: SS
- SS
si vous me permettez de m'écarter de l'exigence de L'OP pour un peu, et envisager un cas où HH est obligatoire, c.-à-d.
- HH
- HH: MM
- HH: MM: SS
La regex, je suis venu avec était:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
nous allons casser en bas:
([0-1]?\d|2[0-3])
- rencontres pour heures(?::([0-5]?\d))?
- correspond en option pendant quelques minutes(?::([0-5]?\d))?
- correspond en option pour les secondes