web-dev-qa-db-fra.com

Modèle d'expression régulière pour la chaîne de temps HH: MM: SS

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

  1. si vous entrez seulement 56, cela devrait être réussi, car 56 peut être considéré comme 56 secondes [SS]
  2. si vous entrez 2: 3 ou 02:03 ou 02: 3 ou 2:03, cela devrait passer. 2 minutes et 3 secondes [MM: SS]
  3. Si vous entrez 20:30:12 laissez-passer avec 20 heures, 30 minutes et 12 secondes [HH: MM: SS]
  4. si vous entrez 78:12, ne passez pas 78 minutes c'est faux ....

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.

36
user418836
^(?:(?:([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
112
Tim Pietzcker

@Tim Pietzcker couvre l'exigence du PO pour un analyseur HH: MM: SS où SS était obligatoire, c'est-à-dire.

  • HH: MM: SS
  • MM: SS
  • SS

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.

  • HH
  • HH: MM
  • HH: MM: SS

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
6
Stephen Quan