27.4. Walidacja adresów email

Klasa Zend_Validate_Email pozwala ci na przeprowadzenie walidacji adresu email. Walidator wpierw dzieli adres email na część lokalną oraz na nazwę serwera, a następnie próbuje sprawdzić je w oparciu o znane specyfikacje dla adresów email oraz adresów serwerów.

Podstawowe użycie

Poniżej podstawowy przykład użycia:

<?php
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
    // adres email wygląda na prawidłowy
} else {
    // adres email jest nieprawidłowy; wyświetl powody
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

Sprawdzi to adres email $email i w przypadku niepowodzenia wypełni $validator->getMessages() użytecznymi informacjami informującymi o błędach.

Części adresu email

Zend_Validate_Email dopasuje każdy prawidłowy adres email zgodny ze specyfikacją RFC2822. Na przykład, poprawnymi adresami będą bob@domain.com, bob+jones@domain.us, "bob@jones"@domain.com oraz "bob jones"@domain.com Niektóre przestarzałe formaty adresów email nie są obecnie walidowane (np. zawierające znak powrotu karetki, albo znak "\" w adresie email).

Walidacja dla różnych typów adresów serwerów

Część adresu email zawierająca adres serwera jest walidowana za pomocą Zend_Validate_Hostname. Domyślnie akceptowane są jedynie adresy DNS w stylu domain.com, ale jeśli chcesz, to możesz włączyć akceptowanie także adresów IP oraz adresów lokalnych. Aby to zrobić, musisz utworzyć instancję Zend_Validate_EmailAddress przekazując parametr określający typ adresów jakie chcesz akceptować. Więcej szczegółów znajdziesz w Zend_Validate_Hostname, jednak poniżej możesz zobaczyć przykład akceptowania zarówno adresów DNS jak i adresów lokalnych:

<?php
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
if ($validator->isValid($email)) {
    // adres email wygląda na prawidłowy
} else {
    // adres email jest nieprawidłowy; wyświetl powody
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}