asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 8048
ASPCode.it - Store

  > > Articoli

Introduzione alle Regular Expression (2/3)

Data di pubblicazione: 11/09/2001        Voto della community: 3,61 (Votanti: 52)


Nel primo articolo abbiamo spiegato che cosa sono le Regular Expression (d'ora in avanti R.E.) e abbiamo preso confidenza con alcuni di quei caratteri speciali che ci permettono di cercare (e/o sostituire) sottostringhe all’interno di un’altra stringa.
Adesso approfondiremo il discorso e vedremo alcuni esempi di utilizzi "pratici" delle R.E. e della loro straordinaria capacità di eseguire compiti anche complessi con un numero davvero minimo di righe di codice.

L'oggetto e le sue proprietà

Per prima cosa, dovremo creare l'oggetto apposito.

Dim oRegExpr    ' dichiariamo la variabile (è sempre una buona pratica)
Set oRegExpr = New RegExp    ' creiamo un' istanza della classe RegExp

Da questo momento in poi potremo utilizzare tutte le proprietà (cioè le variabili) e tutti i metodi (ossia le funzioni) inerenti l'oggetto oRegExpr.
La proprietà più importante è sicuramente il Pattern, cioè il "modello", quella stringa apparentemente incomprensibile (e il primo che dice il contrario è un bugiardo :-)) che però è il cuore dell'oggetto R.E.
Per esempio, poniamo il caso che volessimo controllare che un utente abbia digitato correttamente il numero di telefono (fisso o di cellulare) nel campo apposito.
Questo è il formato internazionale:
(XXX)XXX-XXXX

Di solito, dovremmo procedere in questo modo:
  • Controllare che il campo non sia vuoto
  • Controllare che il primo carattere sia una parentesi
  • Controllare che i successivi caratteri siano cifre e siano in numero di tre
  • altri controlli: parentesi, trattino separatore etc.
Ebbene (che ci crediate oppure no) noi possiamo impostare tutti questi controlli (e tutti gli altri che ci vengono in mente) semplicemente con una stringa di caratteri, il Pattern per l'appunto, in questo modo:

oRegExpr.Pattern = "\([0-9]{3}\)[0-9]{3}-[0-9]{4}"

Ma analizziamo questa "strana" stringa in dettaglio:
  1. "\(" --> vogliamo che il primo carattere sia una parentesi aperta (il carattere '\' o backslash è necessario in quanto la parentesi è uno dei caratteri speciali delle R.E. ed è il carattere cosiddetto "di raggruppamento". – vedi la 1ª lezione)
  2. "[0-9]{3}" --> poi ci devono essere 3 caratteri numerici compresi tra 0 e 9...
  3. "\)" --> ...poi la parentesi tonda chiusa...
  4. "[0-9]{3}" --> ...poi altri 3 caratteri numerici sempre compresi tra 0 e 9...
  5. "-" --> ...il trattino separatore...
  6. "[0-9]{4}" --> ...infine 4 caratteri di tipo numerico compresi tra 0 e 9.
Ci sarebbero altre due proprietà dell'oggetto oRegExpr, la Global e la IgnoreCase, che però tratteremo nel prossimo articolo (per l'esempio del numero di telefono non ci servono, infatti).

Passando ai metodi dell'oggetto oRegExpr, diciamo subito che questi sono 3. Come per le proprietà, anche qui c'è il metodo più importante:il metodo Execute. Questa funzione ha come argomento la stringa in cui vogliamo effettuare la ricerca in base alle "specifiche" stabilite nella proprietà Pattern:

Dim colMatches
Set colMatches = oRegExpr.Execute(strPhoneNumber)
If colMatches.Count > 0 Then
  Response.Write "numero valido"
Else
  Response.Write "numero non valido"
End If

Ecco cosa fa il codice in questione: il metodo Execute esegue la ricerca sulla stringa strPhoneNumber (che conterrà il numero di telefono digitato – si spera correttamente - dall'utente) e "ritorna" (essendo una funzione) una "collezione", cioè un insieme di oggetti di tipo Match. Questo oggetto è in pratica il "responso" della ricerca.
Una delle sue proprietà più importanti è la proprietà Count: se questa variabile conterrà un valore maggiore di zero, allora potremo essere sicuri che il numero di telefono immesso dall'utente è un numero valido, nel senso che aderisce perfettamente al "modello" da noi definito nel pattern.

Ecco come si presenterà la nostra funzione, pronta per essere inserita nelle nostre pagine ASP:

<%
Function PhoneControl(stringa)
  Dim objRegExpr
  Set objRegExpr = New RegExp
  objRegExpr.Pattern = "\([0-9]{3}\)[0-9]{3}-[0-9]{4}"
  Dim colMatches
  Set colMatches = objRegExpr.Execute(stringa)
  PhoneControl = colMatches.Count
End Function

sCellulare = "(347)756-3412"
if PhoneControl(sCellulare) then
  Response.Write("numero di telefono corretto")
else
  Response.Write("numero di telefono non corretto")
end if
%>

Nel prossimo articolo illustreremo altre proprietà e metodi dell'oggetto RegExp e dell'insieme di oggetti di tipo Match da lui "partoriti" (mi si passi il termine :-)). Il tutto naturalmente accompagnato da altri esempi chiarificatori, pronti per essere utilizzati "sul campo".
Alla prossima!




Utenti connessi: 8048