Come convalidare un indirizzo email in PHP



Answers

Puoi usare filter_var per questo.

<?php
   function validateEmail($email) {
      return filter_var($email, FILTER_VALIDATE_EMAIL);
   }
?>
Question

Ho questa funzione per convalidare un indirizzo email:

function validateEMAIL($EMAIL) {
    $v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";

    return (bool)preg_match($v, $EMAIL);
}

Va bene controllare se l'indirizzo e-mail è valido o no?




Nella mia esperienza, le soluzioni regex hanno troppi falsi positivi e le soluzioni filter_var() hanno falsi negativi (specialmente con tutti i nuovi TLDs ).

Invece, è meglio assicurarsi che l'indirizzo abbia tutte le parti richieste di un indirizzo email (utente, simbolo "@" e dominio), quindi verificare che il dominio stesso esista.

Non è possibile determinare (lato server) se esiste un utente di posta elettronica per un dominio esterno.

Questo è un metodo che ho creato in una classe di utilità:

public static function validateEmail($email)
{
    // SET INITIAL RETURN VARIABLES

        $emailIsValid = FALSE;

    // MAKE SURE AN EMPTY STRING WASN'T PASSED

        if (!empty($email))
        {
            // GET EMAIL PARTS

                $domain = ltrim(stristr($email, '@'), '@') . '.';
                $user   = stristr($email, '@', TRUE);

            // VALIDATE EMAIL ADDRESS

                if
                (
                    !empty($user) &&
                    !empty($domain) &&
                    checkdnsrr($domain)
                )
                {$emailIsValid = TRUE;}
        }

    // RETURN RESULT

        return $emailIsValid;
}



Stamattina durante l'esecuzione di alcuni test ho scoperto che FILTER_VALIDATE_EMAIL convalida myname@domain.com.com come indirizzo email valido.

$counter = 0;
foreach($emails as $email){    
    $email = trim($email);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        unset($emails[$counter]);
    }  
    $counter++;
}

Qualcuno ha una raccomandazione su come affrontare questo?







Hai risposto a questa domanda nella "domanda principale" sulla verifica delle email https://.com/a/41129750/1848217

Per me il modo giusto per controllare le email è:

  1. Verifica che il simbolo @ esista e prima e dopo di esso ci sono alcuni simboli non @: /^[^@]+@[^@]+$/
  2. Prova a inviare un'email a questo indirizzo con un "codice di attivazione".
  3. Quando l'utente "attiva" il suo indirizzo email, vedremo che tutto è giusto.

Naturalmente, è possibile mostrare un avviso o un suggerimento in front-end quando l'utente digita "strane" e-mail per aiutarlo a evitare errori comuni, come nessun punto nella parte del dominio o spazi nel nome senza quoting e così via. Ma devi accettare l'indirizzo "ciao @ mondo" se l'utente lo vuole davvero.

Inoltre, è necessario ricordare che lo standard di indirizzo e-mail era e può evolversi, quindi non è possibile digitare alcune espressioni regolari "standard-valide" una volta e per tutte le volte. E bisogna ricordare che alcuni server Internet concreti possono fallire alcuni dettagli dello standard comune e infatti funzionano con il proprio "standard modificato".

Quindi, basta spuntare @, suggerire l'utente su frontend e inviare email di verifica su un dato indirizzo.




Related