Jak sprawdzić poprawność adresu e-mail?

Z PHPEdia.pl
Wersja ERIZ (dyskusja | wkład) z dnia 20:15, 19 lis 2008

(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Skocz do: nawigacji, wyszukiwania

Prosta weryfikacja

Aby zweryfikować, czy dany ciąg znaków jest adresem e-mailem, wystarczy sprawdzić, czy zawiera znak at (@).

<?php
function valid_email($str)
{
    if(strstr($str,'@'))
    {
        return true;
    }
    return false;
}
 
$strGoodEmail='foo@bar.com';
$strBadEmail='foobar.com';
 
valid_email($strGoodEmail); // zwroci true
valid_email($strBadEmail); //zwroci false
 
?>

Zaawansowana weryfikacja

Istnieje też możliwość sprawdzenia adresu e-mail pod kątem wszelkich nieprawidłowości:

<?php
    /**
     * Funkcja sprawdza poprawność adresu e-mail na podstawie wyrażeń regularnych
     * i weryfikacji danych z serwera DNS.
     *
     * Funkcja nie działa pod systemem Ms Windows!
     *
     * @author Bakus <bakus@php.pl>
     * @param string Adres e-mail do weryfikacji
     * @return mixed (bool) true gdy adres będzie poprawny, lub komunikat błędu
     */
    function ValidateEmail($email)
    {
        $wholeexp = '/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i';
        $userexp = "/^[a-z0-9\-\_\+\,\.]+$/i";
        if (preg_match($wholeexp, $email, $regs)) // EMail jest poprawny składniowo?
        {
            $username = $regs[1];
            $host = $regs[2];
            if (!checkdnsrr($host, "MX")) // Czy serwer obsługuje pocztę?
            {
                return "Podany adres jest nieprawidłowy. Przyczyna błędu: Podany serwer nie obsługuje poczty.";
            }else{
                if (!preg_match($userexp, $username)) // Login jest poprawny?
                {
                    return "Podany adres jest nieprawidłowy. Przyczyna błędu: Login zawiera niedozwolone znaki.";
                }else{
                    return true;
                }
            }
        }else{
            return "Podany adres nadawcy jest nieprawidłowy.";
        }
    }
?>


Jest to element FAQ, czyli zestawienia odpowiedzi na najczęściej zadawane pytania.

Zestawienie: Informacje | Podstawy PHP | Porady praktyczne | Pytania z forum | Bezpieczeństwo