Domanda

Voglio analizzare una stringa hh:mm:ss. Un semplice è ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) che prevede 2:3:24 o 02:03:24 stringa.

voglio fare un ulteriore passo avanti e superare la validazione, anche in casi come

  1. se si immette solo 56, dovrebbe essere passata, come 56 può essere considerato come 56 secondi [SS]
  2. se si immette 2: 3 o 02:03 o 02: 3 o 02:03 si dovrebbe passare. 2 minuti e 3 secondi [MM: SS]
  3. Se si immette 20:30:12 passata con 20 ore, 30 minuti e 12 secondi [HH: MM: SS]
  4. se si immette 78:12, non passano 78 minuti è sbagliato ....

In sostanza, se uno ":" viene trovato, in considerazione numero prima ":" come MM e il numero dopo ":" come SS . Se due ":" si trovano considerare come HH: MM: SS

sono arrivato fino a questo modello.

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

Sembra funzionare bene. Volevo sapere qualsiasi altra espressione regolare più semplice, che può fare il lavoro.

È stato utile?

Soluzione

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

Spiegazione:

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

Altri suggerimenti

@ Tim Pietzcker copre requisito del PO di un HH: parser SS dove SS era obbligatorio, cioè

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

Se mi si consente di deviare dal requisito del PO per un po ', e prendere in considerazione il caso in cui HH è obbligatoria, cioè.

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

La regex mi venne in mente fu:

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

la rottura di una delusione:

  • ([0-1]?\d|2[0-3]) - le partite per ore
  • (?::([0-5]?\d))? - corrisponde a scelta per minuti
  • (?::([0-5]?\d))? - corrisponde a scelta per secondi
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top