Michael Denny's Blog ;]


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

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
dicembre 2017
lmmgvsd
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567





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