Frage

Ich möchte a analysieren hh:mm:ss Saite. Ein einfaches ist ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) was erwartet 2:3:24 oder 02:03:24 Saite.

Ich möchte es noch einen Schritt weiter gehen und die Validierung auch in Fällen wie übergeben

  1. Wenn Sie nur 56 eingeben, sollte es bestanden werden, da 56 als 56 Sekunden angesehen werden können.
  2. Wenn Sie 2: 3 oder 02:03 oder 02: 3 oder 2:03 eingeben, sollte es passieren. 2 Minuten und 3 Sekunden [MM: SS
  3. Wenn Sie 20:30:12 mit 20 Stunden, 30 Minuten und 12 Sekunden lang teilnehmen [HH: MM: SS
  4. Wenn Sie 78:12 eingeben, bestehen Sie nicht 78 Minuten. Es ist falsch ....

Grundsätzlich, wenn einer ":" gefunden wird, überlegen Sie die Nummer vorher ":" als MM und Nummer nach ":" als SS. Wenn zwei ":" werden als HH: MM: SS betrachtet

Ich habe dieses Muster ausgedacht.

(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)

Es scheint gut zu funktionieren. Ich wollte einen anderen einfacheren regulären Ausdruck kennen, der den Job erledigen kann.

War es hilfreich?

Lösung

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$

Erläuterung:

^                   # 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

Andere Tipps

@Tim Pietzcker deckt die OP -Anforderung für einen HH: MM: SS -Parser ab, bei dem SS obligatorisch war, dh

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

Wenn Sie es mir erlauben, ein wenig von der OP -Anforderung abzuweichen und einen Fall in Betracht zu ziehen, in dem HH obligatorisch ist, dh dh

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

Die Regex, die ich mir ausgedacht habe, war:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$

Lassen Sie es uns aufschlüsseln:

  • ([0-1]?\d|2[0-3]) - Übereinstimmungen stundenlang
  • (?::([0-5]?\d))? - optional übereinstimmt Minuten
  • (?::([0-5]?\d))? - optional übereinstimmt Sekunden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top