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

  1. si vous entrez seulement 56, il devrait être passe, 56 peut être considéré comme 56 secondes [SS]
  2. si vous entrez 2: 3 ou 2h03 ou 02: 3 ou 2:03, il doit passer. 2 minutes et 3 secondes [MM: SS]
  3. Si vous entrez 20:30:12 passe avec 20 heures, 30 minutes et 12 secondes [HH: MM: SS]
  4. 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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top