Standardowe klasy weryfikatorów

Zend Framework posiada standardowy zestaw gotowych do użycia klas weryfikatorów.

Alnum

Zwraca wartość true tylko wtedy, gdy wartość $value zawiera tylko znaki alfabetu oraz cyfry. Ten weryfikator posiada także opcję, służącą do określenia, czy białe znaki mąją być uznane za prawidłowe.

Alpha

Zwraca wartość true tylko wtedy, gdy wartość $value zawiera tylko znaki alfabetu. Ten weryfikator posiada także opcję, służącą do określenia, czy białe znaki mąją być uznane za prawidłowe.

Barcode

Ten weryfikator jest pomocny przy sprawdzaniu poprawności wartości kodu kreskowego. Obecnie obsługuje standardy "UPC-A" (Universal Product Code) oraz "EAN-13" (European Article Number). Metoda isValid() zwraca wartość true tylko w przypadku poprawnej weryfikacji poprzez algorytm kodów kreskowych. Powinieneś usunąć wszystkie znaki nie będące cyframi od zera do dziewiątki (0-9) przed podaniem wartości do weryfikatora.

Between

Zwraca wartość true tylko wtedy, gdy wartość $value znajduje się pomiędzy minimalną a maksymalną zadaną graniczną wartością. Porównanie domyślnie nie jest ostre (wartość $value może być równa granicznej wartości), ale może być to nadpisane w celu uzyskania ścisłego porównania, w którym wartość $value musi być ściśle większa od wartości minimalnej i ściśle mniejsza od wartości maksymalnej.

Ccnum

Zwraca wartość true tylko wtedy, gdy wartość $value jest prawidłowym numerem karty kredytowej według algorytmu Luhn'a (suma kontrolna mod-10).

Date

Zwraca wartość true jeśli wartość $value jest poprawną datą w formacie YYYY-MM-DD. Jeśli podano opcjonalny parametr locale wtedy data będzie sprawdzana zgodnie z podaną lokalizacją. Dodatkowo jeśli podano opcjonalny parametr format będzie on podstawą do sprawdzenia poprawności daty. Sprawdź Zend_Date::isDate() aby uzyskać szczegóły opcjonalnych parametrów.

Digits

Zwraca wartość true tylko wtedy, gdy wartość $value zawiera tylko cyfry.

EmailAddress

Klasa Zend_Validate_EmailAddress pozwala ci na przeprowadzenie weryfikacji adresu email. Weryfikator 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:

$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_EmailAddress 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 weryfikowane (np. zawierające znak powrotu karetki, albo znak "\" w adresie email).

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

Część adresu email zawierająca adres serwera jest weryfikowana 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:

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

        

Checking if the hostname actually accepts email

Just because an email address is in the correct format, it doesn't necessarily mean that email address actually exists. To help solve this problem, you can use MX validation to check whether an MX (email) entry exists in the DNS record for the email's hostname. This tells you that the hostname accepts email, but doesn't tell you the exact email address itself is valid.

MX checking is not enabled by default and at this time is only supported by UNIX platforms. To enable MX checking you can pass a second parameter to the Zend_Validate_EmailAddress constructor.

$validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS, true);

        

Alternatively you can either pass true or false to $validator->setValidateMx() to enable or disable MX validation.

By enabling this setting network functions will be used to check for the presence of an MX record on the hostname of the email address you wish to validate. Please be aware this will likely slow your script down.

Validating International Domains Names

Zend_Validate_EmailAddress will also match international characters that exist in some domains. This is known as International Domain Name (IDN) support. This is enabled by default, though you can disable this by changing the setting via the internal Zend_Validate_Hostname object that exists within Zend_Validate_EmailAddress.

$validator->hostnameValidator->setValidateIdn(false);

    

Więcej informacji na temat użycia metody setValidateIdn() znajduje się w dokumentacji Zend_Validate_Hostname.

Please note IDNs are only validated if you allow DNS hostnames to be validated.

Validating Top Level Domains

By default a hostname will be checked against a list of known TLDs. This is enabled by default, though you can disable this by changing the setting via the internal Zend_Validate_Hostname object that exists within Zend_Validate_EmailAddress.

$validator->hostnameValidator->setValidateTld(false);

    

Więcej informacji na temat użycia metody setValidateTld() znajduje się w dokumentacji Zend_Validate_Hostname.

Please note TLDs are only validated if you allow DNS hostnames to be validated.

Float

Zwraca wartość true tylko wtedy, gdy wartość $value jest wartością zmiennoprzecinkową.

GreaterThan

Zwraca wartość true tylko wtedy, gdy wartość $value jest większa od zadanej minimalnej granicznej wartości.

Hex

Zwraca wartość true tylko wtedy, gdy wartość $value zawiera tylko znaki szesnastkowe.

Hostname

Zend_Validate_Hostname pozwala ci na przeprowadzenie weryfikacji adresów serwerów w oparciu o zestaw znanych specyfikacji. Możliwe jest sprawdzenie trzech różnych typów adresów serwerów: adresu DNS (np. domain.com), adresu IP (np. 1.2.3.4), oraz adresu lokalnego (np. localhost). Domyślne będzie to sprawdzane jedynie w kontekście adresów DNS.

Podstawowe użycie

Poniżej podstawowy przykład użycia:

$validator = new Zend_Validate_Hostname();
if ($validator->isValid($hostname)) {
    // nazwa serwera wygląda na prawidłową
} else {
    // nazwa jest nieprawidłowa; wyświetl powody
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

        

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

Weryfikacja różnych typów adresów serwerów

Może się okazać, że chcesz zezwolić na użycie adresów IP, adresów lokalnych lub kombinacji dozwolonych typów. Możesz to zrobić przekazując parametr do obiektu Zend_Validate_Hostname gdy tworzysz jego instancję. Parametr powinien być liczbą całkowitą określającą, ktorego typu adresy są dozwolone. Zalecamy użycie stałych klasy Zend_Validate_Hostname w tym celu.

Stałe klasy Zend_Validate_Hostname to: ALLOW_DNS aby zezwalać tylko na adresy DNS, ALLOW_IP aby zezwalać tylko na adresy IP, ALLOW_LOCAL aby zezwalać tylko na adresy lokalne, oraz ALLOW_ALL aby zezwalać na wszystkie typy. Aby tylko sprawdzić adres dla adresów IP możesz użyć poniższego przykładu:

$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
if ($validator->isValid($hostname)) {
    // nazwa serwera wygląda na prawidłową
} else {
    // nazwa jest nieprawidłowa; wyświetl powody
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

        

Tak samo dobrze jak używając stałej ALLOW_ALL do określenia akceptacji adresów wszystkich typow, możesz użyć dowolnej kombinacji tych typów. Na przykład aby akceptować adresy DNS oraz adresy lokalne, uwtórz instancję obiektu Zend_Validate_Hostname w taki sposób:

$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS |
                                        Zend_Validate_Hostname::ALLOW_IP);

        

Validating International Domains Names

Some Country Code Top Level Domains (ccTLDs), such as 'de' (Germany), support international characters in domain names. These are known as International Domain Names (IDN). These domains can be matched by Zend_Validate_Hostname via extended characters that are used in the validation process.

At present the list of supported ccTLDs include:

  • at (Austria)

  • ch (Switzerland)

  • li (Liechtenstein)

  • de (Germany)

  • fi (Finland)

  • hu (Hungary)

  • no (Norway)

  • se (Sweden)

To match an IDN domain it's as simple as just using the standard Hostname validator since IDN matching is enabled by default. If you wish to disable IDN validation this can be done by by either passing a parameter to the Zend_Validate_Hostname constructor or via the $validator->setValidateIdn() method.

You can disable IDN validation by passing a second parameter to the Zend_Validate_Hostname constructor in the following way.

$validator =
    new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS, false);

        

Alternatively you can either pass TRUE or FALSE to $validator->setValidateIdn() to enable or disable IDN validation. If you are trying to match an IDN hostname which isn't currently supported it is likely it will fail validation if it has any international characters in it. Where a ccTLD file doesn't exist in Zend/Validate/Hostname specifying the additional characters a normal hostname validation is performed.

Please note IDNs are only validated if you allow DNS hostnames to be validated.

Validating Top Level Domains

By default a hostname will be checked against a list of known TLDs. If this functionality is not required it can be disabled in much the same way as disabling IDN support. You can disable TLD validation by passing a third parameter to the Zend_Validate_Hostname constructor. In the example below we are supporting IDN validation via the second parameter.

$validator =
    new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS,
                               true,
                               false);

        

Alternatively you can either pass TRUE or FALSE to $validator->setValidateTld() to enable or disable TLD validation.

Please note TLDs are only validated if you allow DNS hostnames to be validated.

InArray

Zwraca wartość true tylko wtedy gdy wartość $value znajduje się w zadanej tablicy. Jeśli opcja ścisłego sprawdzania ma wartość true, wtedy typ wartości $value jest także sprawdzany.

Int

Zwraca wartość true tylko wtedy, gdy wartość $value jest poprawną wartością całkowitą.

Ip

Zwraca wartość true tylko wtedy, gdy wartość $value jest poprawnym adresem IP.

LessThan

Zwraca wartość true tylko wtedy, gdy wartość $value jest mniejsza od zadanej maksymalnej granicznej wartości.

NotEmpty

Zwraca wartość true tylko wtedy, gdy wartość $value nie jest pustą wartością.

Regex

Zwraca wartość true tylko wtedy, gdy wartość $value pasuje do zadanego wyrażenia regularnego.

StringLength

Zwraca wartość true tylko wtedy gdy długość łańcucha znaków $value jest większa lub równa od zadanej wartośći minimalnej i mniejsza lub równa od zadanej wartości maksymalnej. (wtedy gdy zadana wartość maksymalna jest różna od null). Od wersji 1.5.0 metoda setMin() wyrzuca wyjątek jeśli zadana wartość minimalna jest ustawiona na wartość większą od zadanej wartości maksymalnej, a metoda setMax() wyrzuca wyjątek jeśli zadana wartość maksymalna jest ustawiona na wartość mniejszą od zadanej wartości minimalnej. Od wersji 1.0.2, ta klasa obsługuje UTF-8 i inne kodowania znaków, w oparciu o obecną wartość dyrektywy iconv.internal_encoding.