Classi Javascript e PHP per validare un’indirizzo di posta elettronica
Mercoledì 3 Gennaio, 2007Riprendendo il post Validare email in Javascript e PHP, ecco una simpatica classe Javascript in grado di verificare e controllare indirizzi di posta elettronica. Il suo uso è davvero semplice, anche se è un controllo lato client, quindi facilmente bypassabile; basta infatti disabilitare Javascript (propongo petizione contro questa possibilità
oramai tutti i browser permettono di eludere Javascript, e quindi tutti i controlli associato - a breve non funzionerà più nulla su Internet, vedi Ajax
).
-
/*
-
** @name : ckmail.js
-
** @description : Check email syntax
-
** @author : =undo=
-
** @author-web : http://www.undolog.com
-
** @author-email : g.fazioli@undolog.com - g (dot) fazioli (at) undolog (dot) com
-
** @date : 21/09/2006 21.24
-
** @ver : 1.0
-
*/
-
-
var oCKMail = {
-
__release: "1.0",
-
__filter: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i,
-
__username: "",
-
__domain: "",
-
__ext: "",
-
-
// TO DO
-
getUsername: function(e) {
-
if(this.__init(e)) return(this.__username);
-
return(false);
-
},
-
-
// TO DO
-
getDomain: function(e) {
-
if(this.__init(e)) return(this.__domain);
-
return(false);
-
},
-
-
// TO DO
-
getExtension: function(e) {
-
if(this.__init(e)) return(this.__ext);
-
return(false);
-
},
-
-
// TO DO
-
__init: function(e) {
-
if( !this.__filter.test(e) ) return(false);
-
var t = e.split("@");
-
this.__username = t[0];
-
this.__domain = t[1];
-
t = this.__domain.split(".");
-
this.__ext = t[1];
-
return(true);
-
},
-
-
// TO DO
-
// synopsis
-
// check(e,extlist,domainlist);
-
// Esegue una serie di controlli standard su un indirizzo e-mail.
-
// extlist - Si può passare un secondo parametro opzionale che corrisponde ad un array di estensioni che
-
// sono ammesse o escluse (include/exclude extension) in base al primo valore dell'array, tutte le
-
// altre saranno considerate errore.
-
// Eg. [true,"it","com"] passano (include list)
-
// Eg. [false,"it","com"] NON passano (exclude list)
-
// Se -1 non viene preso in considerazione
-
// domainlist - Si può passare un terzo parametro opzionale che corrisponde ad un array di domini che
-
// sono ammessi o esclusi (include/exclude domain) in base al primo valore dell'array, tutte gli
-
// altri saranno considerate errore.
-
// Eg. [true,"alice.it","mac.com"] passano (include list)
-
// Eg. [false,"alice.it","mac.com"] NON passano (exclude list)
-
// Se -1 non viene preso in considerazione
-
//
-
check: function(e) {
-
if( this.__init(e) ) {
-
// check domainExt array check
-
if( arguments.length> 1 ) {
-
if( typeof( arguments[1] ) == "object" ) {
-
if( arguments[1][0] ) { // include list
-
for(var i=0; i <arguments[1].length; i++) {
-
if( this.__ext == arguments[1][i].toLowerCase() ) return(true);
-
}
-
} else { // exclude list
-
for(var i=0; i <arguments[1].length; i++) {
-
if( this.__ext == arguments[1][i].toLowerCase() ) return(false);
-
}
-
return(true);
-
}
-
return(false);
-
}
-
}
-
// check domainName array check
-
if( arguments.length> 2 ) {
-
if( typeof( arguments[2] ) == "object" ) {
-
if( arguments[2][0] ) { // include list
-
for(var i=1; i <arguments[2].length; i++) {
-
if( this.__domain == arguments[2][i].toLowerCase() ) return(true);
-
}
-
} else { // exclude list
-
-
for(var i=1; i <arguments[2].length; i++) {
-
if( this.__domain == arguments[2][i].toLowerCase() ) return(false);
-
}
-
return(true);
-
}
-
return(false);
-
}
-
}
-
return(true); // email correct
-
}
-
return(false); // error
-
}
-
};
L'oggetto oCKMail mette a disposizione alcuni metodi per effettuare tutta una serie di controlli paralleli sull'indirizzo, come l'estensione, il dominio, ecc...
Per essere proprio sicuri se disponete di PHP potete aggiungere un'ulteriore ed efficace controllo prima di eseguire il comando mail(). Ecco la classe PHP utile a tale scopo:
-
/*
-
** @name : cckmail.php
-
** @description : Check email syntax
-
** @author : =undo=
-
** @author-web : http://www.undolog.com
-
** @author-email : g.fazioli@undolog.com - g (dot) fazioli (at) undolog (dot) com
-
** @date : 21/09/2006 23.58
-
** @ver : 1.0
-
**
-
** EXAMPLES
-
**
-
** // Controlla un indirizzo ESCLUDENDO quelle e-mail con dominio "e-lementi.com" e "mac.com"
-
**
-
** $oCKMail = new CCKMail();
-
** $oCKMail->check($email, NULL, array(false,"e-lementi.com","mac.com") );
-
**
-
** // Controlla un indirizzo INCLUDENDO quelle e-mail con dominio "e-lementi.com" e "mac.com"
-
**
-
** $oCKMail = new CCKMail();
-
** $oCKMail->check($email, NULL, array(true,"e-lementi.com","mac.com") );
-
**
-
** // Controlla un indirizzo ESCLUDENDO quelle e-mail con estensione "net","it","org"
-
**
-
** $oCKMail = new CCKMail();
-
** $oCKMail->check($email, array(false,"net","it","org") );
-
**
-
** HISTORY / CHANGE LOG
-
**
-
*/
-
-
if($type == '') $type = "MX";
-
return true;
-
}
-
}
-
return false;
-
}
-
}
-
}
-
//
-
class CCKMail {
-
var $__release = "1.1";
-
var $status = false;
-
var $username;
-
var $domain;
-
var $ext;
-
//
-
function CCKMail() {}
-
//
-
function _test($e) {
-
$this->status = false;
-
$p = '/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/';
-
//
-
}
-
}
-
//
-
function check($m, $e=NULL,$d=NULL) {
-
$this->_test($m);
-
if( $this->status ) {
-
// check domainExt array check
-
if( $e[0] ) { // include list
-
for($i=1; $i <sizeof($e); $i++) {
-
}
-
} else { // exclude list
-
for($i=1; $i <sizeof($e); $i++) {
-
}
-
return(true);
-
}
-
return(false);
-
}
-
// check domainName array check
-
if( $d[0] ) { // include list
-
for($i=1; $i <sizeof($d); $i++) {
-
}
-
} else { // exclude list
-
for($i=1; $i <sizeof($d); $i++) {
-
}
-
return(true);
-
}
-
return(false);
-
}
-
return(true);
-
}
-
return(false);
-
}
-
}
-
?>
La cosa ineteressante è la capacità di questa classe di connettersi ai server MX (vedi checkdnsrr() ) per verificare la presenza del dominio. Quindi oltre ad eseguire un controllo sintattico sull'indirizzo di posta elettronica viene eseguito un vero e proprio ping del dominio passato. Possiamo dire che questo metodo è sicuro all'80%...
















Lascia un commento