Michael Denny's Blog ;]


Tutto quello che non avresti mai voluto sapere sulle Regular Expression...e se sei qui ti tocca!
Archivio Posts
Anno 2015

Anno 2014

Anno 2013

Anno 2012

Anno 2010

Anno 2008

Anno 2007

[RegEx In Practice] - Controllo formale dell'orario step by step (su evento OnKeyUp)

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 
martedì, 21 dic 2010 Ore. 19.16
Calendario
maggio 2017
lmmgvsd
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234









Statistiche
  • Views Home Page: 42.202
  • Views Posts: 51.829
  • Views Gallerie: 0
  • n° Posts: 30
  • n° Commenti: 16
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003