schema di espressione regolare per HH: MM: SS stringa di tempo
-
25-10-2019 - |
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
- se si immette solo 56, dovrebbe essere passata, come 56 può essere considerato come 56 secondi [SS]
- se si immette 2: 3 o 02:03 o 02: 3 o 02:03 si dovrebbe passare. 2 minuti e 3 secondi [MM: SS]
- Se si immette 20:30:12 passata con 20 ore, 30 minuti e 12 secondi [HH: MM: SS]
- 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.
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