Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Convalida del campo email

Un controllo server side in VBScript
Un controllo server side in VBScript
Link copiato negli appunti

Nella creazione/gestione del nostro sito web, ci troviamo spesso dinanzi alla
necessità di acquisire i dati utente per mezzo di un form, e quindi di effettuare i necessari controlli di convalida dei vari campi dell’input.

In questo articolo ci occupiamo del controllo di un campo in particolare,
quello che contiene l’indirizzo email. Il controllo non dovrà stabilire se un certo indirizzo email esiste effettivamente, ma se esso è corretto dal punto di vista sintattico.

È bene chiarire fin d’ora che l’articolo non tratta (né vuole trattare) la convalida dell’indirizzo email dal punto di vista della sicurezza informatica, che richiede ben altro e specifico approccio. Neppure pretendiamo qui di esaurire l’argomento, vasto e articolato, che anzi riprenderemo presto per esaminarne altri aspetti e metodi.

Controlli lato client e lato server

Fondamentalmente abbiamo due strumenti per effettuare un controllo di validazione di un form: Javascript e le ASP.

Javascript è un linguaggio di scripting “lato client” e ci permette di effettuare un controllo dell’input prima che questo venga inviato al server. Con le ASP invece possiamo controllare la validità dell’input dopo che questo è stato inoltrato al server.

Entrambi i metodi hanno pregi e debolezze, e la scelta dell’uno o dell’altro dipende dall’architettura della nostra applicazione, è influenzata da diversi fattori ed esula dal tema di questo articolo. Ricordiamo soltanto che un controllo efficace dovrebbe prevederli entrambi.

In questo articolo impareremo come implementare un controllo del campo email lato server, utilizzando le ASP e in particolare VBScript.Una validazione del campo email in VBScript

Diamo prima un’occhiata al codice nel suo insieme:

function ConvalidaCampo(indirizzo)
dim valido
valido = true
dim nome, parte, i, c
nome = Split(indirizzo, "@")
if UBound(nome) <> 1 then
valido = false
exit function
end if
for each parte in nome
if Len(parte) <= 0 then
valido = false
exit function
end if
for i = 1 to Len(parte)
c = Lcase(Mid(parte, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c)
<= 0 and not IsNumeric(c) then
valido = false
exit function
end if
next
if Left(parte, 1) = "." or Right(parte, 1) = "." then
valido = false
exit function
end if
next
if InStr(nome(1), ".") <= 0 then
valido = false
exit function
end if
i = Len(nome(1)) - InStrRev(nome(1), ".")
if i <> 2 and i <> 3 then
valido = false
exit function
end if
if InStr(indirizzo, "..") > 0 then
valido = false
end if
convalidacampo = valido
end function

Il codice può sembrare complicato a prima vista, ma ad uno sguardo
più attento si rivela invece molto semplice.

Prima di tutto: è una funzione. Ricordiamo che una funzione è una porzione di codice che può essere richiamata e quindi riutilizzata più volte nel corso di un singolo script ASP.

La sintassi di una funzione è semplicemente:

function NomeFunzione(argomento)
...
...
end function

“ConvalidaCampo” è il nome della funzione, e “indirizzo” è il nome della variabile contenente la stringa che viene passata alla funzione come argomento, in questo caso il nome del campo da convalidare.

Supponiamo che la stringa da controllare sia m.orlandi@html.it. Vediamo il
codice:

dim valido
valido = true
dim nome, parte, i, c
nome = Split(indirizzo, "@")

Abbiamo inizializzato a true il valore della variabile booleana “valido” (i possibili valori sono true e false). Se non verrà modificato, il suo valore resterà true.

Poi abbiamo dichiarato alcune variabili che verranno utilizzate dalla funzione e, nella terza riga, abbiamo “splittato” la variabile interna indirizzo usando come separatore il segno “@”.

Per mezzo dell’istruzione “split” abbiamo creato l’array “nome” composto di due elementi, il primo contenente la stringa “m.orlandi” e il secondo contenente la stringa “html.it”:

if UBound(nome) <> 1 then
valido = false
exit function
end if

Per una array monodimensionale, il metodo Ubound ritorna semplicemente il più alto tra gli indici degli elementi dell’array. Nel nostro caso, per un indirizzo email valido Ubound(nome) deve valere 1 perché l’array “nome” contiene due elementi (ricordiamo che l’indice del primo elemento di un array vale 0, quindi gli elementi del nostro array “nome” saranno nome(0) e nome(1)):

for each parte in nome
if Len(parte) <= 0 then
valido = false
exit function
end if
for i = 1 to Len(parte)
c = Lcase(Mid(parte, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c)
<= 0 and not IsNumeric(c) then
valido = false
exit function
end if
next
if Left(parte, 1) = "." or Right(parte, 1) = "." then
valido = false
exit function
end if
next

L’istruzione “for each parte in nome” assegna un nome (“parte”) ad ognuna delle parti in cui abbiamo suddiviso (splittato) l’input, cioè i due elementi nome(0) e nome(1) dell’array “nome”. In sostanza, diciamo “rinomina “parte” ognuno degli elementi dell’array, e per ciascuno di essi esegui le istruzioni contenute tra questa riga e quella finale del ciclo, l’istruzione “next”, che sono:

Prima istruzione:

if Len(parte) <= 0 then
valido = false
exit function
end if

Se l’elemento dell’array ha lunghezza minore o uguale a zero, allora l’indirizzo non è valido (come può una stringa essere un indirizzo email valido, se non contiene nulla da un lato o dall’altro del segno @ ?).

Seconda istruzione:

for i = 1 to Len(parte)
c = Lcase(Mid(parte, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c)
<= 0 and not IsNumeric(c) then
valido = false
exit function
end if
next

È un altro ciclo for annidato nel precedente, appena diverso da esso
perché in questo caso il ciclo non viene eseguito “per ogni elemento di un certo array”, ma per un certo numero prefissato di volte. Quante? Tante quanti sono i caratteri che compongono l’elemento dell’array, cioè la stringa di testo che precede o che segue il segno @. In sostanza stiamo scorrendo, uno alla volta, i caratteri della stringa “m.orlandi” prima, e “html.it” dopo.

Per fare cosa? Quanto segue:

c = Lcase(Mid(parte, i, 1))

Alla variabile c viene assegnato il valore di Lcase(Mid(parte, i, 1)). L’utile istruzione VBScript “Mid” si usa per isolare sottostringhe nell’ambito di stringhe più lunghe. Nel nostro caso prendiamo un carattere alla volta nel corpo delle nostre stringhe e, se maiuscolo, lo trasformiamo in minuscolo (Lcase).

Durante il primo ciclo, a c verranno assegnati via via i valori “m” “.” “o” “r” “l” “a” “n” “d” “i” . Durante il secondo ciclo i valori “h” “t” “m” “l” “.” “i” “t”:

if InStr("abcdefghijklmnopqrstuvwxyz_-.", c)
<= 0 and not IsNumeric(c) then
valido = false
exit function
end if

Se uno di questi valori non è contenuto nella stringa di controllo "abcdefghijklmnopqrstuvwxyz_-." (che contiene tutti e soli i caratteri ammessi in un indirizzo email), l’indirizzo non è valido e l’esecuzione della funzione è terminata.

Notiamo che l’istruzione Lcase era necessaria perché InStr è “case sensitive”, cioè fa differenza tra caratteri minuscoli e caratteri maiuscoli.

Terza istruzione:

if Left(parte, 1) = "." or Right(parte, 1) = "." then
valido = false
exit function
end if

Se il carattere iniziale o quello finale è il punto, l’indirizzo, che non può iniziare o terminare con il punto, non è valido. Procediamo con l’analisi del codice:

if InStr(nome(1), ".") <= 0 then
valido = false
exit function
end if

Questo controllo agisce solo sulla porzione dell’indirizzo successiva
al segno @ (nome(1), il dominio, che nel nostro caso vale “html.it”). Viene verificata la presenza del carattere “.”, che deve comparire almeno una volta.

i = Len(nome(1)) - InStrRev(nome(1), ".")
if i <> 2 and i <> 3 then
valido = false
exit function
end if

Nel blocco qui sopra viene verificata la lunghezza in caratteri del TLD (Top-Level Domain, la parte di nome(1) che segue l’ultimo carattere “.” (ricordiamo che i nomi dominio possono contenere anche più di un punto e che il TLD è la parte dell’estensione seguente, appunto, l’ultimo punto). Il TLD può essere lungo solo due oppure tre caratteri.

La verifica viene effettuata sottraendo dalla lunghezza totale di nome(1)
la lunghezza della sua sottostringa compresa tra il primo punto e l’ultimo
carattere che troviamo leggendo nome(1) alla rovescia a partire dall’ultimo carattere (istruzione InStrRev).

if InStr(indirizzo, "..") > 0 then
valido = false
end if

Infine controlliamo che l’indirizzo non contenga due caratteri “.” consecutivi, condizione che non è permessa.

Notiamo che questo ultimo blocco condizionale, a differenza degli altri, non
contiene l’istruzione:

exit function

dato che la funzione è comunque terminata.

L’assegnazione finale:

ConvalidaCampo = valido

Terminata l’analisi del codice (forse un po’ noiosa per l’utente più navigato, ma sicuramente utile ai meno esperti per sintonizzarsi con il modo di operare di una funzione VBScript, e a tutti per rispolverare le istruzioni di manipolazione delle stringhe), non ci resta che richiamare la funzione dove necessario.

Come? In un modo semplicissimo: per validare l’indirizzo “m.orlandi@html.it” basterà inserire nel nostro script la riga:

ConvalidaCampo(“m.orlandi@html.it”)

oppure le righe:

indirizzo = “m.orlandi@html.it”
ConvalidaCampo(indirizzo)

Più in generale, la validazione della email come campo di un form (che
nel nostro esempio si chiama, appunto, “indirizzo”) avverrà
per mezzo di un blocco di istruzioni come:

email = request.form(“indirizzo”)
if ConvalidaCampo(email) then
‘va bene anche if ConvalidaCampo(email) = true
… istruzioni per elaborare l’indirizzo email …
else
… istruzioni per far ripetere l’inserimento …
end if

Se l’indirizzo è corretto, la variabile “valido” e
quindi “ConvalidaCampo(email)” valgono true, e quindi l’elaborazione può procedere.

In caso contrario il loro valore sarà false e lo script seguirà
il percorso alternativo.


Ti consigliamo anche