Niedawno w sieci trafiłem na świeży post dotyczący sprawdzania poprawności e-maila w PHP – był on tak słaby, że zmotywowałem się do napisania jak można to zrobić lepiej a przynajmniej w miarę dobrze 🙂
/**
* Validate e-mail
* @param string $email
* @return bool
*/
function valid_email($email)
{
if (empty($email) || !strpos($email, '@'))
{
return false;
}
list($email_name, $email_domain) = explode("@", $email);
return filter_var($email, FILTER_VALIDATE_EMAIL) && checkdnsrr($email_domain, "MX");
}
Słowem wyjaśnienia:
- sprawdzamy, czy parametr $email jest pusty – empty jest bardzo szybkie
- sprawdzamy czy w $email brakuje znaku @, jeśli tak zwracamy false – brak „małpy” skutkuje rzuceniem notice przez funkcję list
- rozbijamy podany e-mail na nazwę konta i nazwę domeny
- sprawdzamy czy podana zmienna jest poprawnym adresem e-mail
- sprawdzamy czy domena z podanego adresu e-mail istnieje
Uwagi:
- funkcja filter_var jest dostępna od PHP 5.2.0
- funkcja checkdnsrr na platformach Windows jest dostępna dopiero od PHP 5.3.0