regex phpmailer - Come convalidare un indirizzo email in PHP





aruba form (9)


Hai risposto a questa domanda nella "domanda principale" sulla verifica delle email https://stackoverflow.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 @: /^[^@][email protected][^@]+$/
  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.

Ho questa funzione per convalidare un indirizzo email:

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

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

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




Stamattina durante l'esecuzione di alcuni test ho scoperto che FILTER_VALIDATE_EMAIL convalida [email protected] 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?







Questo non solo convaliderà la tua email, ma la disinfetterà anche per i caratteri imprevisti:

$email  = $_POST['email'];
$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);

if (filter_var($emailB, FILTER_VALIDATE_EMAIL) === false ||
    $emailB != $email
) {
    echo "This email adress isn't valid!";
    exit(0);
}



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;
}



Puoi usare filter_var per questo.

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



Penso che potresti stare meglio usando i filters integrati di PHP - in questo caso particolare:

Può restituire un valore vero o falso quando viene fornito con il parametro FILTER_VALIDATE_EMAIL .




Se stai solo cercando un'espressione regolare che permetta diversi punti, trattini bassi e trattini, è la seguente: [a-zA-z0-9.-]+\@[a-zA-z0-9.-]+.[a-zA-Z]+ . Ciò consentirà di convalidare un'e-mail abbastanza stupida come [email protected]_matrix.com .




Puoi iniziare dall'articolo di Wikipedia :

  • Lettere maiuscole e minuscole in inglese (az, AZ)
  • Cifre da 0 a 9
  • Personaggi ! # $% & '* + - / =? ^ _ `{| } ~
  • Personaggio . (punto, punto, punto) a condizione che non sia il primo o l'ultimo carattere, e che anche questo non compaia due o più volte consecutivamente.






php regex email email-validation