Come annunciato dal titolo, la seguente regular expression, serve per validare un orario mentre lo si sta digitando, utilizzando, in pratica, una regular che controlla step by step.
(?:^(?:[01][0-9]|2[0-3]|[0-9]):(?:[0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$)|(?:^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$)|(?:^(?:[01][0-9]|2[0-3]|[0-9]):?$)
Questa regular può essere eseguita mentre si sta digitando del testo dentro ad una textbox, intercettando l'evento OnKeyUp, ed eseguendo la regular sulla stringa attuale + il carattere digitato, se il carattere che si sta per aggiungere invalida la regular, è sufficiente cancellare la pressione del tasto, in questo modo si ottiene un inserimento guidato. Questo meccanismo non si potrebbe ottenere applicando la regular postata nell'articolo precedente ^([01][0-9]|2[0-3]|[1-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$, questo perchè la suddetta regular si aspetta la stringa completa contenente un orario valido, mentre quella postata in questo articolo riesce ad esaminare ogni step rilevante.
Se fate attenzione alla prima parte della regular vedrete che assomiglia a quella postata nell'articolo precedente:
(?:^(?:[01][0-9]|2[0-3]|[0-9]):(?:[0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$)
^([01][0-9]|2[0-3]|[1-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$
Questo perchè l'ultimo step della regular prevede che l'orario sia validato per intero (per intederci l'ultimo step è quello riguardante le ultime cifre che compongono i secondi).
Esempio di come la regular expression influisce carattere per carattere, durante la digitazione:
2 valida ^(?:[01][0-9]|2[0-3]|[0-9]):?$
23 valida ^(?:[01][0-9]|2[0-3]|[0-9]):?$
233 non valida
23 valida ^(?:[01][0-9]|2[0-3]|[0-9]):?$
23: valida ^(?:[01][0-9]|2[0-3]|[0-9]):?$
23:6 valida ^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$
23:60 non valida
23:6 valida ^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$
23: valida ^(?:[01][0-9]|2[0-3]|[0-9]):?$
23:5 valida ^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$
23:59 valida ^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$
23:59: valida ^(?:[01][0-9]|2[0-3]|[0-9]):([0-5][0-9]|[0-9]):?$
23:59:5 valida ^(?:[01][0-9]|2[0-3]|[0-9]):(?:[0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$
23:59:59 valida ^(?:[01][0-9]|2[0-3]|[0-9]):(?:[0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$
Stay Tuned