F.A.Q. numero 515. Ho bisogno di controllare la validità di due (o più) indirizzi e-mail usando la RegExp del tutorial, come posso fare? Lo script del tutorial Validare e-mail con una RegExp è in effetti pensato per interagire con un solo campo e-mail.
Se è necessario controllarne pià di uno bisogna parametrizzare la funzione ed usarla tramite un'altra che valuta i risultati forniti dalla prima e dialoga con l'utente.
Per prima cosa dunque è necessario eliminare tutta la parte di interazione con l'utente e fare di ControllaMail() una funzione che semplicemente ritorna un valore: function ControllaMail(MailToCheck)
{
Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
return Filtro.test(MailToCheck)
}
Ora la funzione accetta in ingresso (parametro MailToCheck) direttamente la stringa da controllare e restituisce true o false a seconda che il controllo abbia esito positivo o negativo.
Così trasformata la funzione può essere usata in una situazione reale come quella che vediamo in questo script: <html>
<head>
<title>Check 2 campi e-mail con RegExp</title>
<script>
<!--
function ControllaMail(MailToCheck)
{
Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
return Filtro.test(MailToCheck)
}
function Controlla()
{
var r1=ControllaMail(document.modulo.mail1.value);
var r2=ControllaMail(document.modulo.mail2.value);
if (r1 && r2)
return true;
else
{
if (!r1)
alert("La mail 1 e' sbagliata");
if (!r2)
alert("La mail 2 e' sbagliata");
}
return false;
}
//-->
</script>
</head>
<body>
<form name='modulo' action='paginadestinazione.php' onsubmit='return Controlla()'>
<input type='text' name='mail1' value='webmaster@jsdir.com' /> <br>
<input type='text' name='mail2' value='indirizzo@sbagliato@jsdir.com' /> <br>
<input type='submit' value=' - Invia - ' />
</form>
</body>
</html>
Abbiamo un modulo che contiene due indirizzi e-mail, uno dei quali (il secondo) è palesemente errato per la presenza di due simboli "@".
L'invio del modulo è subordinato a quello che ritornerà l'event-hangler onsubmit(), una procedura ormai banale per chiunque abbia mai validato un form via JavaScript.
L'event-handler esegue la funzione Controlla() che si occupa effettiamente di verificare se gli indirizzi e-mail sono esatti secondo la Regular Expression.
Nelle due variabili r1 ed r2 viene conservato il risultato dei controlli sui due valori.
La funzione alla terza riga ( if (r1 && r2) ) controlla se r1 ed r2 sono entrambi "true", in tal caso si interrompe e ritorna un valore "true" che passato dall'onsubmit al form ne consente la partenza.
Se uno dei due valori invece è falso, la funzione li controlla singolarmente e presenta un alert() per ognuno di quelli trovati errato.
In chiusura dell'else() la funzione ritorna false che impedirà all'onsubmit di inviare il form.
Da qui ad integrare la ControllaMail(MailToCheck) in una normale funzione che valida più campi di un form, il passo è breve.
Per un generico script validatore basterà usare la funzione più o meno in questo modo: . . .
function Valida()
{
var InviaForm=true;
. . .
if ( !ControllaMail(document.modulo.campomail.value) )
{
alert("L'indirizzo e-mail inserito non e' esatto");
InviaForm=false;
}
. . .
return InviaForm;
}
. . .
qui la variabile InviaForm dichiarata "true" all'inizio diventa false quando (ed ogni volta) uno dei controlli sui vari campi dell'ipotetico form fallisce; la funzione ritorna al chiamante (probabilmente un onsubmit come sopra) il valore finale di InviaForm che impedirà dunque l'invio se almeno uno dei controlli fallisce. |