Validazione indirizzo mail

GoldenDragon

Nuovo Utente
22 Giu 2015
8
0
0
Devo validare l'indirizzo mail indicato dall'utente al momento della registrazione. Ho provato ad usare
Codice:
filter_var($mail, FILTER_VALIDATE_EMAIL);
ma è tutt'altro che sicuro: si limita a controllare la presenza di una chiocciola che separi il nome dal dominio e di un punto che separi il provider dall'estensione. Quindi inserendo la mail "sono@un.hacker", questa viene validata come corretta.
Quali alternative esistono?
 
Questa è la funzione che uso:

Codice:
function check_email_address($email) {
        // cerco la presenza di @ e se la lunghezza è giusta
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
            // Email non valida perché c'è una sezione di caratteri di lunghezza inferiore
            return false;
        }
        // Splitto per rendere la vita più bella e facile :)
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
                return false;
            }
        }
        if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Controllo il dominio
            $domain_array = explode(".", $email_array[1]);
            if (sizeof($domain_array) < 2) {
                return false; // La lunghezza del dominio non è abbastanza
            }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
                    return false;
                }
            }
        }

        return true;
    }
 

Discussioni simili