Содержание


Стандартные классы валидации


Standard Validation Classes, Валидация, ЗФ2, Zend Framework 2, ZF2, ру, ru




Zend Framework поставляется со стандартным набором готовых классов валидации, которые вы можете использовать.

 



Alnum (буквенно-цифровой)

 

Zend\Validator\Alnum позволяет проверить, содержит ли заданное значение только буквы и цифры.

 

Поддерживаемые параметры для Zend\Validator\Alnum:

 

Для Zend\Validator\Alnum поддерживаются следующие параметры:

allowWhiteSpace: допускаются ли символы пробела. По умолчанию, значение данного параметра - FALSE.

 

Основы использования

 

Основным примером является следующий:

 

  1. $validator = new Zend\Validator\Alnum();
  2. if ($validator->isValid('Abcd12')) {
  3. // значение содержит только разрешенные символы
  4. } else {
  5. // false
  6. }
  7.  

Использование пробелов

 

По умолчанию, пробелы не допускаются, поскольку они не являются частью алфавита. Тем не менее, существует способ разрешить их во входных данных. Это позволяет проверить полные предложения или фразы.

 

Чтобы разрешить использование пробелов, вы должны задать параметр allowWhiteSpace. Это может быть сделано при создании экземпляра валидатора, либо позднее, с помощью метода setAllowWhiteSpace(). Чтобы узнать фактическое состояние, можно использовать getAllowWhiteSpace().

 

  1. $validator = new Zend\Validator\Alnum(array('allowWhiteSpace' => true));
  2. if ($validator->isValid('Abcd and 12')) {
  3. // значение содержит только разрешенные символы
  4. } else {
  5. // false
  6. }
  7.  

Использование различных языков

 

При использовании Zend\Validator\Alnum, язык, заданный пользователем в своем браузере, используется для установки разрешенных символов. Это значит, что если пользователь устанавливает de для немецкого языка, то он может также ввести символы типа ä, ö, ü (символы немецкого алфавита) дополнительно к символам английского алфавита.

 

Какие символы разрешены - полностью зависит от используемого языка, так, как каждый язык определяет свой собственный набор символов.

 

На самом деле, есть 3 языка, которые не допускаются в ваших сценариях. Эти языки - корейский, китайский и японский, потому, что в алфавите, используемом этими языками, один символ может быть построен с использованием нескольких символов.

 

В случае, если вы используете эти языки, входные данные могут быть проверены только с использованием английского алфавита.

 

 

 

 


Alpha (буквенный)

 

Zend\Validator\Alpha позволяет проверить, содержит ли заданное значение только символы алфавита. Не существует ограничений для проверки на длину входных данных. Этот валидатор похож на Zend\Validator\Alnum, с той разницей, что он не допускает цифры.

 

Поддерживаемые параметры для Zend\Validator\Alpha

 

Для Zend\Validator\Alpha поддерживаются следующие параметры:

allowWhiteSpace: допускаются ли символы пробела. По умолчанию, значение этого параметра - FALSE.

 

Основы использования

 

Простой пример использования:

 

 

  1. $validator = new Zend\Validator\Alpha();
  2. if ($validator->isValid('Abcd')) {
  3. // значение содержит только разрешенные символы
  4. } else {
  5. // false
  6. }
  7.  

Использование пробелов

 

По умолчанию пробелы не допускаются, поскольку они не являются частью алфавита. Тем не менее, существует способ разрешить их во входных данных. Это позволяет проверить полные предложения или фразы.

 

Чтобы разрешить использование пробелов, вы должны задать параметр allowWhiteSpace. Это может быть сделано при создании экземпляра валидатора, либо позднее, с помощью метода setAllowWhiteSpace(). Чтобы узнать фактическое состояние, можно использовать getAllowWhiteSpace().

 

  1. $validator = new Zend\Validator\Alpha(array('allowWhiteSpace' => true));
  2. if ($validator->isValid('Abcd and efg')) {
  3. // значение содержит только разрешенные символы
  4. } else {
  5. // false
  6. }
  7.  

Использование различных языков

 

Если используется Zend\Validator\Alpha , то язык, который пользователь задает в своем браузере, будет использоваться для установки разрешенных символов. Это значит, что если пользователь устанавливает de для немецкого языка, то он может также ввести символы типа ä, ö, ü (символы немецкого алфавита) дополнительно к символам английского алфавита.

 

Какие символы разрешены - полностью зависит от используемого языка, так, как каждый язык определяет свой собственный набор символов.

 

На самом деле, есть 3 языка, которые не допускаются в ваших сценариях. Эти языки - корейский, китайский и японский, потому, что в алфавите, используемом этими языками, один символ может быть построен с использованием нескольких символов.

 

В случае, если вы используете эти языки, входные данные могут быть проверены только с использованием английского алфавита.

 

 

 

 


Barcode (штрихкод)

 

Zend\Validator\Barcode позволяет проверить, может ли заданное значение быть представлено в качестве штрих-кода.

 

Zend\Validator\Barcode поддерживает множество стандартов штрих-кодов и может быть легко расширен собственными реализациями штрих-кодов. Поддерживаются следующие стандарты штрих-кодов:

CODABAR: известен также, как Code-a-bar.

 Этот штрих-код не имеет ограничений на длину. Он поддерживает только цифры, и 6 специальных символов. Codabar является штрихкодом высокой надежности. Это очень старый стандарт. Типовые  примеры использования - в авиатранспортных накладных, или фотолабораториях, когда многокомпонентные формы выводятся на матричных принтерах.

CODE128:  CODE128 является штрих-кодом с высокой плотностью.

 Этот штих-код не имеет ограничений на длину. Он поддерживает первые 128 символов ASCII. Контрольная сумма для печатных знаков рассчитывается, как 103 по модулю. Этот стандарт используется во всем мире, так как поддерживает символы верхнего и нижнего регистров.

CODE25: часто называемый "25" или "Code25 Industrial".

 Этот штрих-код не имеет ограничений на длину. Он поддерживает только цифры, и последняя цифра, контрольная, не являющаяся обязательной, рассчитывается, как 10 по модулю. Это очень старый стандарт и в настоящее время используется не часто. Общие случаи использования - в промышленности.

CODE25INTERLEAVED: часто называемый "Interleaved 25". Настоящий стандарт представляет собой вариант CODE25. Он не имеет ограничения на длину, но должен состоять из четного количества символов. Он поддерживает только цифры, и последняя цифра, контрольная, не являющаяся обязательной, рассчитывается, как 10 по модулю. Используется во всем мире и часто встречается на рынке.

CODE39: CODE39 - это один из старейших имеющихся штрих-кодов. Он поддерживает цифры, символы алфавита в верхнем регистре и 7 специальных символов, таких, как пробел, точка и знак доллара. У него может быть необязательная контрольная сумма, которая рассчитывается, как 43 по модулю. Этот стандарт используется во всем мире, и распространен в индустрии.

CODE39EXT: CODE39EXT является расширением CODE39.

 У этого штрих-кода те же свойства, что и у CODE39. Кроме того, он позволяет  использовать все 128 символов ASCII. Этот стандарт используется во всем мире и распространен в индустрии.

CODE93: CODE93 является приемником CODE39.

 Этот штрих-код имеет переменную длину. Он поддерживает цифры, буквы алфавита и 7 специальных символов. У него может быть необязательная контрольная сумма, которая вычисляется, как 47 по модулю и состоит из двух символов. Этот стандарт дает более плотный и безопасный код по сравнению с CODE39.

CODE93EXT: CODE93EXT является расширением CODE93.

 У этого штрих-кода те же свойства, что и у CODE93. Кроме того, он позволяет использовать все 128 символов ASCII. Этот стандарт используется во всем мире и распространен в индустрии.

EAN2: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 Этот штрих-код должен состоять из 2 символов. Он поддерживает только цифры и у него нет контрольной суммы. Этот стандарт используется, в основном, как дополнение к EAN13 (ICBN) при печати на книгах.

EAN5: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 Этот штрих-код должен состоять из 5 символов. Он поддерживает только цифры и у него нет контрольной суммы. Этот стандарт используется, в основном, как дополнение к EAN13 (ICBN) при печати на книгах.

EAN8: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 Этот штрих-код может состоять из 7 или 8 символов. Он поддерживает только цифры. Если он состоит из 8 цифр, то включает контрольную сумму. Этот стандарт используется во всем мире, но имеет очень ограниченный диапазон применения. Он может быть найден на небольших этикетках, на которых больший штрих-код не мог быть напечатан.

EAN12: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 У этого штрих-кода длина должна быть равна 12 символам. Он поддерживает только цифры, и последняя цифра всегда является контрольной суммой, которая вычисляется, как 10 по модулю. Этот стандарт используется в США и распространен на рынке. Он был заменен стандартом EAN13.

EAN13: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 У этого штрих-кода длина должна быть равна 13 символам. Он поддерживает только цифры, и последняя цифра всегда является контрольной суммой, которая вычисляется, как 10 по модулю. Этот стандарт используется во всем мире и распространен на рынке.

EAN14: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 У этого штрих-кода длина должна быть равна 14 символам. Он поддерживает только цифры, и последняя цифра всегда является контрольной суммой, которая вычисляется, как 10 по модулю. Этот стандарт используется во всем мире и распространен на рынке. Он является преемником стандарту EAN13.

EAN18: EAN - это аббревиатура для "European Article Number" ("европейский номер товара").

 У этого штрих-кода длина должна быть равна 18 символам. Он поддерживает только цифры. Последняя цифра - это всегда контрольная сумма, которая вычисляется, как 10 по модулю. Этот код часто используется для идентификации контейнеров в грузоперевозках.

GTIN12: GTIN - это аббревиатура для "Global Trade Item Number" ("глобальный номер товара").

 Этот штрих-код использует те же стандарты, что и EAN12, и является его приемником. Обычно используется в США.

GTIN13: GTIN - это аббревиатура для "Global Trade Item Number" ("глобальный номер товара").

 Этот штрих-код использует те же стандарты, что и EAN13, и является его приемником. Используется во всем мире в индустрии.

GTIN14: GTIN - это аббревиатура для "Global Trade Item Number" ("глобальный номер товара").

 Этот штрих-код использует те же стандарты, что и EAN14, и является его приемником. Используется во всем мире и часто встречается на рынке.

IDENTCODE: Identcode используется в немецкой почте и DHL. Это специальное расширение для Code25.

 У этого штрих-кода длина должна быть 12 символов. Он поддерживает только цифры, и последняя цифра всегда является контрольной суммой, которая вычисляется, как 10 по модулю. Этот стандарт, в основном, используют компании DP (немецкая почта) и DHL.

INTELLIGENTMAIL: Intelligent Mail - это почтовый штрих-код.

 У этого штрих-кода длина может быть 20, 25, 29 или 31 символ. Он поддерживает только цифры и у него нет контрольной суммы. Этот стандарт является приемником для стандартов PLANET и POSTNET. Он, в основном, используется в сервисе почтовой службы Соединенных Штатов.

ISSN: ISSN - это аббревиатура для International Standard Serial Number (международный стандартный серийный номер).

 У этого штрих-кода длина должна быть равна 8 или 13 символам. Он поддерживает только цифры, и последней цифрой должна быть контрольная сумма, которая вычисляется, как 11 по модулю. Он используется во всем мире для печатных изданий.

ITF14: ITF14 является GS1 расширением штрих-кода Interleaved 25.

 Этот штрих-код является специальным вариантом Interleaved 25. Его длина должна быть равна 14 символам и он основан на GTIN14. Он поддерживает только цифры, и последняя цифра должна быть контрольной суммой, которая вычисляется, как 10 по модулю. Он используется во всем мире и распространен на рынке.

LEITCODE: Leitcode используется немецкой почтой и DHL. Это специальная реализация Code25.

 Длина у этого штрих-кода должна быть 14 символов. Он поддерживает только цифры, и последняя цифра всегда должна быть контрольной суммой, которая вычисляется, как 10 по модулю. Этот стандарт используют, в основном, компании DP (немецкая почта) и DHL.

PLANET: Planet - это аббревиатура для Postal Alpha Numeric Encoding Technique (почтовая буквенно-цифровая технология кодирования).

 У этого штрих-кода длина должна быть равна 12 или 14 символам. Он поддерживает только цифры, и последняя цифра всегда должна быть контрольной суммой. Этот стандарт используется, в основном, почтовой службой Соединенных Штатов.

POSTNET: Postnet используется почтовой службой США.

 Длина этого штрих-кода может быть равна 6, 7, 10 или 12 символов. Он поддерживает только цифры, и последняя цифра всегда является контрольной суммой. Этот стандарт используется, в основном, почтовой службой Соединенных Штатов.

ROYALMAIL: Royalmail используется Royal Mail (почтовой службой Великобритании, королевская почтовая служба ее величества).

 У этого штрих-кода нет определенной длины. Он поддерживает цифры, буквы в верхнем регистре, и последняя цифра всегда является контрольной суммой. Этот стандарт используется, в основном, Royal Mail для ее службы Cleanmail. Он так же называется RM4SCC.

SSCC: SSCC - это аббревиатура для "Serial Shipping Container Code" (серийный код контейнерных перевозок).

 Этот штрих-код представляет собой вариант штрих-кода EAN. У него должна быть длина 18 символов, поддерживаются только цифры. Последняя цифра должна быть контрольной суммой, которая вычисляется, как 10 по модулю. Стандарт широко используется в транспортной отрасли.

UPCA: UPC - это аббревиатура для "Universal Product Code" ("универсальный товарный код").

 Этот штрих-код предшествовал EAN13. У него должна быть длина 12 символов, поддерживаются только цифры. Последняя цифра должна быть контрольной суммой, которая вычисляется, как 10 по модулю. Стандарт широко используется в США.

UPCE: UPCE - это короткий вариант для UPCA.

 Этот штрих-код является уменьшенным вариантом UPCA. У него длина может быть 6, 7 или 8 символов, поддерживаются только цифры. Когда длина штрих-кода составляет 8 символов, она включает контрольную сумму, которая вычисляется, как 10 по модулю. Используется обычно для небольших продуктов, где штрих-код UPCA не поместился бы.

 

 Поддерживаемые параметры для Zend\Validator\Barcode

 

 Для Zend\Validator\Barcode поддерживаются следующие параметры:

 • adapter (адаптер): устанавливает адаптер штрих-кода, который будет использоваться. Поддерживаются все вышеуказанные адаптеры. При использовании собственного адаптера, вы должны установить полное имя класса.

 • checksum (контрольная сумма): TRUE, если штрих-код должен содержать контрольную сумму. Значение по умолчанию зависит от адаптера. Обратите внимание, что некоторые адаптеры не позволяют установить этот параметр.

 • options (параметры): определяет дополнительные параметры для самостоятельно созданных адаптеров.

 

 Основы использования

 

 Чтобы проверить, является ли заданная стока штрих-кодом, вам всего лишь нужно знать его тип. Смотрите следующий пример для штрих-кода EAN13:

 

  1. $valid = new Zend\Validator\Barcode('EAN13');
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }
  7.  

Параметр контрольной суммы

 

Некоторые штрих-коды дополнительно могут снабжаться контрольной суммой. Эти штрих-коды будут валидны даже без контрольной суммы. Тем не менее, когда вы предоставляете контрольную сумму, вы должны также проверить ее. По умолчанию, эти типы штрих-кодов не выполняют проверку контрольной суммы. Для использования параметра проверки контрольной суммы, вы можете определить, должна ли контрольная сумма проверяться или игнорироваться.

 

  1. $valid = new Zend\Validator\Barcode(array(
  2. 'adapter' => 'EAN13',
  3. 'checksum' => false,
  4. ));
  5. if ($valid->isValid($input)) {
  6. // входные данные валидны
  7. } else {
  8. // входные данные не валидны
  9. }
  10.  

Примечание

Снижение безопасности при отключении проверки контрольной суммы

При отключении проверки контрольной суммы, вы также снижаете безопасность использования штрих-кодов. Кроме того, следует отметить, что вы можете отключить проверку контрольной суммы для тех типов штрих-кодов, которые должны содержать контрольную сумму. Штрих-коды, которые в действительности не будут валидными, определятся, как валидные, даже если они таковыми не являются.

 

Создание пользовательских адаптеров

 

Вы можете создать собственные валидаторы штрих-кодов для использования с Zend\Validator\Barcode; это часто необходимо при работе с собственными типами штрих-кодов. Чтобы создать свой собственный валидатор штрих-кода, вам понадобится слудующая информация.

Length (длина): длина вашего штрих-кода. Может принимать одно из следующих значений:

        • Integer: значение больше нуля, что означает, что у штрих-кода должна быть эта длина

        • -1: нет ограничений на длину штрих-кода

        • "even": длиной этого штрих-кода должно быть четное количество цифр

        • "odd": длиной этого штрих-кода должно быть нечетное количество цифр

        • array: массив целочисленных значений. Длиной этого штрих-кода должно быть одно из значений массива.

Characters (символы): строка, которая содержит все допустимые символы этого штрих-кода. Также допустимо целое значение, 128, которое означает первые 128 символов таблицы ASCII.

Checksum (контрольная сумма): строка, которая будет использоваться в качестве обратного вызова для метода, который выполняет проверку контрольной суммы.

 

Пользовательский валидатор штрих-кода должен наследовать Zend\Validator\Barcode\AbstractAdapter или реализовывать интерфейс Zend\Validator\Barcode\AdapterInterface.

 

Для примера, давайте создадим валидатор, который ожидает четное количество символов, включает все цифры и буквы 'ABCDE', и требует контрольную сумму.

 

  1. class My\Barcode\MyBar extends Zend\Validator\Barcode\AbstractAdapter
  2. {
  3. protected $length = 'even';
  4. protected $characters = '0123456789ABCDE';
  5. protected $checksum = 'mod66';
  6. protected function mod66($barcode)
  7. {
  8. // выполнить некоторые проверки и вернуть значение логического типа
  9. }
  10. }
  11. $valid = new Zend\Validator\Barcode('My\Barcode\MyBar');
  12. if ($valid->isValid($input)) {
  13. // входные данные валидны
  14. } else {
  15. // входные данные не валидны
  16. }
  17.  


Between (диапазон)

 

Zend\Validator\Between позволяет проверить, находится ли заданное значение между двумя другими.

 

Примечание

Zend\Validator\Between поддерживает только проверку чисел

Следует отметить, что Zend\Validator\Between поддерживает только проверку чисел. Строки или даты не могут быть проверены с помощью этого валидатора.

 

Поддерживаемые параметры для Zend\Validator\Between

 

Для Zend\Validator\Between поддерживаются следующие параметры:

inclusive (включительно): определяет, включает ли проверка минимальный и максимальный порог значений, или нет. Значение по умолчанию - TRUE.

max (максимум): устанавливает максимальный порог для проверки.

min (минимум): устанавливает минимальный порог для проверки.

 

Поведение по умолчанию для Zend\Validator\Between

 

По умолчанию этот валидатор проверяет, находится ли значение между min и max, где оба пороговых значения являются допустимыми значениями.

 

  1. $valid = new Zend\Validator\Between(array('min' => 0, 'max' => 10));
  2. $value = 10;
  3. $result = $valid->isValid($value);
  4. // вернет true
  5.  

В приведенном выше примере результатом является TRUE по той причине, что по умолчанию поиск включает пороговые значения. В нашем случае это означает, что допускается любое значение от '0' до '10'. А значения типа '-1' или '11' вернут FALSE.

 

Проверка, исключающая пороговые значения

 

Иногда полезно проверить значение, не включая пороговые значения. Смотрите следующий пример:

 

  1. $valid = new ZendValidatorBetween(
  2. array(
  3. 'min' => 0,
  4. 'max' => 10,
  5. 'inclusive' => false
  6. )
  7. );
  8. $value = 10;
  9. $result = $valid->isValid($value);
  10. // вернет false

Пример, почти эквивалентный нашему первому примеру, но мы исключили пороговые значения. Теперь значения '0' и '10' больше не допускаются и вернется FALSE.

 

 

 

 



Callback (обратный вызов)

 

Zend\Validator\Callback позволяет обеспечить обратный вызов для проверки заданного значения.

 

Поддерживаемые параметры для Zend\Validator\Callback

 

Для Zend\Validator\Callback поддерживаются следующие параметры:

callback (обратный вызов): устанавливает обратный вызов, который будет вызван при валидации.

options (параметры): устанавливает дополнительные параметры, которые будут переданы в функцию обратного вызова.

 

Основы использования

 

Простейший вариант использования сводится к заданию одной функции и использовании ее в качестве обратного вызова. Предположим, у нас есть такая функция.

 

  1. function myMethod($value)
  2. {
  3. // некоторая проверка
  4. return true;
  5. }

Чтобы использовать ее с Zend\Validator\Callback, вы должны вызвать ее следующим образом:

 

  1. $valid = new Zend\Validator\Callback('myMethod');
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }

 

Использование с замыканиями

 

 

PHP 5.3 предоставляет возможность создания замыканий, которые, по сути, являются автономными, или анонимными функциями. PHP рассматривает замыкания как другую форму обратного вызова, и, как таковые, они могут быть использованы с Zend\Validator\Callback. Например:

 

 

  1. $valid = new ZendValidatorCallback(function($value){
  2. // некоторая проверка
  3. return true;
  4. });
  5. if ($valid->isValid($input)) {
  6. // входные данные валидны
  7. } else {
  8. // входные данные не валидны
  9. }

Использование обратного вызова, основанного на классах

 

Конечно же, можно использовать метод класса для обратного вызова. Допустим, у нас есть следующий метод класса:

 

  1. class MyClass
  2. {
  3. public function myMethod($value)
  4. {
  5. // некоторая проверка
  6. return true;
  7. }
  8. }

Определение обратного вызова в этом случае практически такое же. Вы должны просто создать экземпляр класса перед методом, и создать массив, описывающий обратный вызов:

 

  1. $object = new MyClass;
  2. $valid = new Zend\Validator\Callback(array($object, 'myMethod'));
  3. if ($valid->isValid($input)) {
  4. // входные данные валидны
  5. } else {
  6. // входные данные не валидны
  7. }

В качестве обратного вызова вы можете также определить статический метод. Рассмотрим следующее определение класса и использование валидатора:

 

  1. class MyClass
  2. {
  3. public static function test($value)
  4. {
  5. // некоторая проверка
  6. return true;
  7. }
  8. }
  9. $valid = new Zend\Validator\Callback(array('MyClass', 'test'));
  10. if ($valid->isValid($input)) {
  11. // входные данные валидны
  12. } else {
  13. // входные данные не валидны
  14. }

Наконец, при использовании PHP 5.3, вы можете определить магический метод __invoke() в вашем классе. Если вы это сделаете, просто предоставьте экземпляр класса в качестве обратного вызова:

 

  1. class MyClass
  2. {
  3. public function __invoke($value)
  4. {
  5. // некоторая проверка
  6. return true;
  7. }
  8. }
  9. $object = new MyClass();
  10. $valid = new Zend\Validator\Callback($object);
  11. if ($valid->isValid($input)) {
  12. // входные данные валидны
  13. } else {
  14. // входные данные не валидны
  15. }

Добавление параметров

 

Zend\Validator\Callback позволяет использовать параметры, которые передаются, как дополнительные аргументы в функцию обратного вызова.

 

Рассмотрим следующее определение класса и метода:

 

  1. class MyClass
  2. {
  3. function myMethod($value, $option)
  4. {
  5. // некоторая проверка
  6. return true;
  7. }
  8. // если присутствует контекст
  9. function myMethod($value, $context, $option)
  10. {
  11. // некоторая проверка
  12. return true;
  13. }
  14. }

Есть два способа донести до валидатора дополнительные параметры: передать их в конструктор, или передать их в метод setOptions().

 

Чтобы передать их в конструктор, вы должны будете передать массив, содержащий два ключа, "callback" и "options":

 

  1. $valid = new Zend\Validator\Callback(array(
  2. 'callback' => array('MyClass', 'myMethod'),
  3. 'options' => $option,
  4. ));
  5.  
  6. if ($valid->isValid($input)) {
  7. // входные данные допустимы
  8. } else {
  9. // входные данные недопустимы
  10. }

В противном случае, вы можете передать их в валидатор после создания экземпляра:

 

  1. $valid = new Zend\Validator\Callback(array('MyClass', 'myMethod'));
  2. $valid->setOptions($option);
  3. if ($valid->isValid($input)) {
  4. // входные данные допустимы
  5. } else {
  6. // входные данные недопустимы
  7. }

Когда эти дополнительные значения переданы в isValid(), тогда эти значения будут добавлены непосредственно после $value.

 

  1. $valid = new Zend\Validator\Callback(array('MyClass', 'myMethod'));
  2. $valid->setOptions($option);
  3. if ($valid->isValid($input, $additional)) {
  4. // входные данные допустимы
  5. } else {
  6. // входные данные недопустимы
  7. }

При выполнении обратного вызова, значение для валидации всегда передается в функцию обратного вызова, как первый аргумент, за ним передают все остальные значения в isValid(); все остальные параметры следуют за ними. Количество и тип параметров, которые могут быть использованы, не ограничен.

 

 

 

 


CreditCard (кредитная карта)

 

Zend\Validator\CreditCard позволяет проверить, является ли заданное значение номером кредитной карты.

Кредитная карта содержит несколько элементов метаданных, включая голограмму, номер счета, логотип, срок действия, код безопасности, и имя владельца карты. Алгоритмы для проверки сочетаний метаданных известны только компании-производителю, и должны быть уточнены у нее в целях оплаты. Однако, часто бывает полезно знать, попадает, или нет заданное число в диапазон возможных номеров до проведения такой проверки, и Zend\Validator\CreditCard просто проверяет, что номер кредитной карты хорошо сформирован.

 

Для случаев, когда у вас есть сервис, который может выполнить всестороннюю проверку, Zend\Validator\CreditCard предоставляет возможность подключить обратный вызов сервиса, после того, как номер кредитной карты будет признан действительным; обратный вызов будет инициализирован, и возвращенное значение будет определять общую валидность.

 

Допускаются следующие выпускающие институты:

• American Express

• China UnionPay

• Diners Club Card Blanche

• Diners Club International

• Diners Club US & Canada

• Discover Card

• JCB

• Laser

• Maestro

• MasterCard

• Solo

• Visa

• Visa Electron

 

Примечание

Недействительные институты

Институты Bankcard и Diners Club enRoute более не существуют. Поэтому они считаются недействительными.

Switch произвел ребрендинг в Visa, и, следовательно, также считается недействительным.

 

Поддерживаемые параметры для Zend\Validator\CreditCard

 

Для Zend\Validator\CreditCard поддерживаются следующие параметры:

service: обратный вызов для онлайн-сервиса, который будет использоваться для проверки

type: тип кредитной карты, которая будет проверяться. Смотрите список институтов выше для подробностей.

 

Основы использования

 

Есть несколько институтов кредитных карт, которые могут быть проверены с помощью Zend\Validator\CreditCard. По умолчанию, допускаются все известные институты. Смотрите следующий пример:

 

  1. $valid = new Zend\Validator\CreditCard();
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }

Приведенный выше пример должен произвести проверку для всех известных институтов кредитных карт.

 

Принятие только определенных кредитных карт

 

Иногда бывает необходимо принимать не все, а только определенные институты кредитных карт; например, когда у вас есть интернет-магазин, который принимает только карты Visa и American Express. Zend\Validator\CreditCard позволяет сделать именно это, ограничив проверку именно этими институтами.

 

Вы можете предоставить один институт:

 

  1. $valid = new Zend\Validator\CreditCard(
  2. Zend\Validator\CreditCard::AMERICAN_EXPRESS
  3. );

Если вы хотите разрешить несколько институтов, вы должны предоставить их в виде массива:

 

  1. $valid = new Zend\Validator\CreditCard(array(
  2. Zend\Validator\CreditCard::AMERICAN_EXPRESS,
  3. Zend\Validator\CreditCard::VISA
  4. ));

Как и для всех валидаторов, вы можете передать ассоциативный массив параметров, либо экземпляр Traversable. В этом случае вы должны предоставить институты в массиве с ключом type, как показано ниже:

 

  1. $valid = new Zend\Validator\CreditCard(array(
  2. 'type' => array(Zend\Validator\CreditCard::AMERICAN_EXPRESS)
  3. ));

Константы для институтов кредитных карт

 

Институт                                                                   Константа

American Express                                                   ZendValidatorCreditCard::AMERICAN_EXPRESS

China UnionPay                                                      Zend\Validator\CreditCard::UNIONPAY

Diners Club Card Blanche                                    Zend\Validator\CreditCard::DINERS_CLUB

Diners Club International                                      Zend\Validator\CreditCard::DINERS_CLUB

Diners Club US & Canada                                    ZendValidatorCreditCard::DINERS_CLUB_US

Discover Card                                                          Zend\Validator\CreditCard::DISCOVER

JCB                                                                            Zend\Validator\CreditCard::JCB

Laser                                                                         Zend\Validator\CreditCard::LASER

Maestro                                                                     Zend\Validator\CreditCard::MAESTRO

MasterCard                                                              Zend\Validator\CreditCard::MASTERCARD

Solo                                                                           Zend\Validator\CreditCard::SOLO

Visa                                                                           Zend\Validator\CreditCard::VISA

Visa Electron                                                           Zend\Validator\CreditCard::VISA

 

Вы также можете установить или добавить институты после создания экземпляра методами setType(), addType() и getType().

 

  1. $valid = new Zend\Validator\CreditCard();(color:#009900/div background-color:#ccccccnew/span/spannbsp;nbsp;
  2. $valid->setType(array(
  3. Zend\Validator\CreditCard::AMERICAN_EXPRESS,
  4. Zend\Validator\CreditCard::VISA
  5. ));

Примечание

Институты по умолчанию

Если институт не задан при создании экземпляра, будут использованы ВСЕ, как если бы были установлены все институты сразу.

 

В этом случае использование addType() бесполезно, поскольку все институты уже добавлены.

 

Проверка с использованием сторонних API (прикладных программных интерфейсов)

 

Как было сказано ранее, Zend\Validator\CreditCard будет проверять только номер кредитной карты. К счастью, некоторые институты предоставляют онлайн API, которыми можно проверить номер кредитной карты с помощью алгоритмов, не доступных общественности. Большинство из этих сервисов являются платными. Поэтому подобная проверка по умолчанию отключена.

 

Если у вас есть доступ к такому API, вы можете использовать его, чтобы добавить в Zend\Validator\CreditCard и повысить безопасность валидации.

 

Для этого вам нужно просто задать обратный вызов, который будет выполнен после того, как пройдет основная проверка. Это избавляет от вызова API для недействительных номеров, что увеличивает производительность приложения.

 

Метод setService() устанавливает новый сервис, а getService() возвращает набор сервисов. В качестве параметра конфигурации, вы можете задать ключ массива 'service' при создании экземпляра. Для получения более подробной информации о деталях, обратитесь к разделу Callback.

 

  1. // Ваш класс сервиса
  2. class CcService
  3. {
  4. public function checkOnline($cardnumber, $types)
  5. {
  6. // некоторая онлайн проверка
  7. }
  8. }
  9. // Валидация
  10. $service = new CcService();
  11. $valid = new Zend\Validator\CreditCard(Zend\Validator\CreditCard::VISA);
  12. $valid->setService(array($service, 'checkOnline'));

Как вы можете видеть, метод обратного вызова будет вызван с номером кредитной карты в качестве первого параметра, и допустимых типов в качестве второго параметра.

 

 

 

 

Ccnum

 

Примечание

Валидатор Ccnum является устаревшим и заменен валидатором CreditCard. Из соображений безопасности вы должны использовать CreditCard вместо Ccnum.

 

 

 

 


Date (дата)

 

Zend\Validator\Date позволяет проверить, содержит ли заданное значение дату. Этот валидатор проверяет также локализованные исходные данные.

 

Поддерживаемые параметры для Zend\Validator\Date

 

Для Zend\Validator\Date поддерживаются следующие параметры:

 

•  format (формат): устанавливает формат, который используется для записи даты

•  locale (локаль): устанавливает локаль, которая будет использована для проверки значения даты

 

Проверка даты по умолчанию

 

Самый простой способ проверить дату, это использовать формат даты по умолчанию. Это используется, когда не были заданы локаль и формат.

 

  1. $validator = new Zend\Validator\Date();
  2. $validator->isValid('2000-10-10'); // вернет true
  3. $validator->isValid('10.10.2000'); // вернет false

Формат даты по умолчанию для Zend\Validator\Date 'yyyy-MM-dd'.

 

Локализация проверки даты

 

Zend\Validator\Date поддерживает также самостоятельно определенные форматы даты. Если вы хотите проверить такую дату, вы можете использовать параметр format. Этот параметр допускает формат согласно спецификации стандартной функции PHP date().

 

  1. $validator = new Zend\Validator\Date(array('format' => 'Y'));
  2. $validator->isValid('2010'); // вернет true
  3. $validator->isValid('May'); // вернет false

Конечно, вы можете сочетать формат и локаль. В этом случае вы можете использовать локализованные имена месяцев или дней.

 

  1. $validator = new Zend\Validator\Date(array('format' => 'Y F', 'locale' => 'de'));
  2. $validator->isValid('2010 Dezember'); // вернет true
  3. $validator->isValid('2010 June'); // вернет false


Db\RecordExists (наличие записи в БД) и Db\NoRecordExists (отсутствие записи в БД)

 

Zend\Validator\Db\RecordExists и Zend\Validator\Db\NoRecordExists предоставляют средства для проверки того, существует ли запись в заданной таблице базы данных с заданным значением.

 

Поддерживаемые параметры для Zend\Validator\Db\*

 

Для Zend\Validator\Db\NoRecordExists и Zend\Validator\Db\RecordExists поддерживаются следующие параметры:

adapter (адаптер): адаптер базы данных, который будет использоваться для поиска.

exclude (исключить): установка записей, которые будут исключены из поиска.

field (поля): поле базы данных в этой таблице, в котором будет произведен поиск записи.

schema (схема): устанавливает схему, которая будет использоваться для поиска.

table (таблица): таблица, в которой будет произведен поиск записи.

 

Основы использования

 

Простой пример использования валидаторов:

 

  1. // Проверить наличие электронного адреса в базе данных
  2. $validator = new Zend\Validator\Db\RecordExists(
  3. array(
  4. 'table' => 'users',
  5. 'field' => 'emailaddress'
  6. )
  7. );
  8. if ($validator->isValid($emailaddress)) {
  9. // электронный адрес валиден
  10. } else {
  11. // электронный адрес не валиден; печатать причины
  12. foreach ($validator->getMessages() as $message) {
  13. echo "$message\n";
  14. }
  15. }

Выше проверяется наличие электронного адреса в таблице базы данных. Если запись, содержащая значение $emailaddress будет найдена, то выводится сообщение об ошибке

 

  1. // Проверить наличие имени пользователя в базе данных
  2. $validator = new Zend\Validator\Db\NoRecordExists(
  3. array(
  4. 'table' => 'users',
  5. 'field' => 'username'
  6. )
  7. );
  8. if ($validator->isValid($username)) {
  9. // имя пользователя допустимо
  10. } else {
  11. // имя пользователя недопустимо; печатать причины
  12. $messages = $validator->getMessages();
  13. foreach ($messages as $message) {
  14. echo "$message\n";
  15. }
  16. }

Выше проверяется наличие имени пользователя в таблице базы данных. Если запись, содержащая значение $username будет найдена, то выводится сообщение об ошибке.

 

Исключение записей

 

Zend\Validator\Db\RecordExists и Zend\Validator\Db\NoRecordExists также обеспечивают средства для проверки баз данных без учета части таблицы путем либо предоставления строки с условием, либо массива с ключами 'field' и 'value'.

 

Если предоставляется массив с исключающим условием, используется оператор !=, так что вы можете проверить остальную часть таблицы на значения, прежде, чем изменять запись (например, на форму профиля пользователя).

 

  1. // Проверить, нет ли этого имени у других пользователей
  2. $user_id = $user->getId();
  3. $validator = new Zend\Validator\Db\NoRecordExists(
  4. array(
  5. 'table' => 'users',
  6. 'field' => 'username',
  7. 'exclude' => array(
  8. 'field' => 'id',
  9. 'value' => $user_id
  10. )
  11. )
  12. );
  13. if ($validator->isValid($username)) {
  14. // имя пользователя допустимо
  15. } else {
  16. // имя пользователя недопустимо; печатать причины
  17. $messages = $validator->getMessages();
  18. foreach ($messages as $message) {
  19. echo "$message\n";
  20. }
  21. }

Приведенный выше пример будет проверять таблицу, чтобы убедиться, что ниодна запись, кроме id = $user_id не содержит значения $username.

 

Вы можете предоставить строку, содержащую выражение исключения, так вы можете иначе использовать оператор !=. Это может быть полезно при тестировании с составными ключами.

 

  1. $email = 'user@example.com';
  2. $clause = $db->quoteInto('email = ?', $email);
  3. $validator = new Zend\Validator\Db\RecordExists(
  4. array(
  5. 'table' => 'users',
  6. 'field' => 'username',
  7. 'exclude' => $clause
  8. )
  9. );
  10. if ($validator->isValid($username)) {
  11. // имя пользователя допустимо
  12. } else {
  13. // имя пользователя недопустимо; печатать причины
  14. $messages = $validator->getMessages();
  15. foreach ($messages as $message) {
  16. echo "$message\n";
  17. }
  18. }

Приведенный выше пример проверит таблицу 'users', чтобы удостовериться, что только одна запись действительна для  имени пользователя $username и электронного адреса $email.

 

Адаптеры базы данных

 

Вы также можете указать адаптер. Это позволит вам работать с приложениями, использующими несколько адаптеров к базе данных, или когда вы не установите адаптер по умолчанию. Как в примере ниже:

 

  1. $validator = new Zend\Validator\Db\RecordExists(
  2. array(
  3. 'table' => 'users',
  4. 'field' => 'id',
  5. 'adapter' => $dbAdapter
  6. )
  7. );

Схема базы данных

 

Вы можете задать схему в вашей базе данных для таких адаптеров, как PostgreSQL и DB/2 для простой подстановки массива с ключами table и schema. Как в примере ниже:

 

  1. $validator = new Zend\Validator\Db\RecordExists(
  2. array(
  3. 'table' => 'users',
  4. 'schema' => 'my',
  5. 'field' => 'id'
  6. )
  7. );


Digits (цифры)

 

Zend\Validator\Digits проверяет, содержит ли заданное значение только цифры.

 

Поддерживаемые параметры для Zend\Validator\Digits

 

Для Zend\Validator\Digits нет поддерживаемых параметров.

 

Проверка цифр

 

Для проверки того, содержит ли заданное значение только цифры и никаких других символов, просто вызовите валидатор, как показано в следующем примере:

 

  1. $validator = new Zend\Validator\Digits();
  2. $validator->isValid("1234567890"); // вернет true
  3. $validator->isValid(1234); // вернет true
  4. $validator->isValid('1a234'); // вернет false

Примечание

Проверка чисел

Если вы хотите проверить числа или числовые значения, вы должны понимать, что этот валидатор проверяет только цифры. Это означает, что любой другой знак, такой, как разделитель тысяч, или запятая, не пройдет этот валидатор. В таких случаях вы должны использовать Zend\I18n\Validator\Int или Zend\I18n\Validator\Float.

 

 

 

 



Электронный адрес

 

Zend\Validator\EmailAddress позволяет проверить электронный адрес. Валидатор сначала разбивает электронный адрес на локальная_часть @ имя_хоста и пытается сопоставить их известным спецификациям для адресов электронной почты и доменных имен.

 

Основы использования

 

Простой пример использования:

 

  1. $validator = new Zend\Validator\EmailAddress();
  2. if ($validator->isValid($email)) {
  3. // электронный адрес действителен
  4. } else {
  5. // электронный адрес недействителен
  6. foreach ($validator->getMessages() as $message) {
  7. echo "$message\n";
  8. }
  9. }

Здесь сопоставляется электронный адрес $email, и, в случае неудачи, getMessages() заполняется полезными сообщениями об ошибках.

 

Параметры для проверки адресов электронной почты

 

Zend\Validator\EmailAddress поддерживает несколько параметров, которые могут быть установлены при создании экземпляра с помощью задания соответствующих параметров массивом, либо, в последствии, с помощью setOptions(). Поддерживаются следующие параметры:

allow (разрешения): определяет допустимые типы доменных имен. Этот параметр используется в сочетании с параметром hostname для установки проверки имени хоста. Для получения дополнительной информации о возможных значениях этого параметра смотрите hostname и допустимые константы ALLOW*. По умолчанию значение этого параметра - ALLOW_DNS.

deep(глубокая проверка): определяет, должны ли MX записи серверов пройти глубокую проверку. Если этот параметр установлен в TRUE, ресурсные записи, такие, как A, A6 и AAAA используются для проверки допустимости электронного адреса сервером. По умолчанию значение этого параметра - FALSE.

domain (домен): определяет, должна ли быть проверена доменная часть. Если этот параметр установлен в FALSE, то будет проверена только локальная часть электронного адреса. В этом случае валидатор Hostname не будет вызван. По умолчанию значение этого параметра - TRUE.

hostname (имя хоста): устанавливает валидатор имен, который будет проверять часть электронного адреса, содержащую имя хоста.

mx (mail exchanger, почтовый ретранслятор): задает, должны ли определяться записи MX на сервере. Если этот параметр установлен в TRUE, записи MX будут использованы, чтобы определить, допускает ли сервер адрес электронной почты. По умолчанию значение этого параметра - FALSE.

 

  1. $validator = new Zend\Validator\EmailAddress();
  2. $validator->setOptions(array('domain' => false));

Сложные локальные части

 

Zend\Validator\EmailAddress допускает любой электронный адрес, соответствующий RFC2822. Например, к допустимым относятся электронные адреса bob@domain.com, bob+jones@domain.us, “bob@jones”@domain.com и “bob jones”@domain.com.

Некоторые устаревшие форматы электронного адреса в настоящее время будут невалидны (например, содержащие символ возврата каретки, или "\").

 

Проверка только локальной части

 

Если вам нужен Zend\Validator\EmailAddress только для проверки локальной части электронного адреса, и вы хотите отключить проверку имени хоста, вы можете установить параметр domain в FALSE. Это заставит Zend\Validator\EmailAddress не проверять ту часть электронного адреса, которая содержит имя хоста.

 

  1. $validator = new Zend\Validator\EmailAddress();
  2. $validator->setOptions(array('domain' => FALSE));

Проверка различных типов имен

 

Часть электронного адреса, содержащая имя хоста, проверяется с помощью Zend\Validator\Hostname. По умолчанию допускаются только DNS имена вида domain.com, хотя при желании вы можете разрешить IP адреса и локальные имена хостов.

 

Для этого при создании экземпляра Zend\Validator\EmailAddress вы должны передать параметр, указывающий, какие типы имен вы хотите разрешить. Подробности приведены в Zend\Validator\Hostname, хотя пример того, как разрешить и DNS, и локальные имена, приводится ниже:

 

  1. $validator = new Zend\Validator\EmailAddress(
  2. Zend\Validator\Hostname::ALLOW_DNS |
  3. Zend\Validator\Hostname::ALLOW_LOCAL);
  4. if ($validator->isValid($email)) {
  5. // адрес электронной почты действителен
  6. } else {
  7. // адрес электронной почты недействителен; печатать причины
  8. foreach ($validator->getMessages() as $message) {
  9. echo "$message\n";
  10. }
  11. }

Проверить, действительно ли имя хоста допускает существование электронного адреса

 

То, что адрес электронной почты в правильном формате, еще не означает, что электронный адрес существует на самом деле. Чтобы решить эту проблему, вы можете использовать валидацию MX для проверки существования записи MX (адреса электронной почты) в записях DNS для имени хоста электронной почты. Это скажет о том, что электронный адрес допустим для имени хоста, но не скажет вам о том, действительно ли этот адрес электронной почты является валидным.

 

Проверка MX не используется по умолчанию. Включить проверку MX можно, передав второй параметр в конструктор Zend\Validator\EmailAddress.

 

  1. $validator = new Zend\Validator\EmailAddress(
  2. array(
  3. 'allow' => Zend\Validator\Hostname::ALLOW_DNS,
  4. 'useMxCheck' => true
  5. )
  6. );

Примечание

Проверка MX под Windows

В среде Windows проверка MX доступна только в том случае, если используется PHP версии 5.3 и выше. В  PHP ниже 5.3 проверка MX не будет использоваться, даже если она активирована соответствующим параметром.

 

В качестве альтернативы, вы можете передать TRUE или FALSE в метод setValidateMx() для включения или отключения MX проверки.

 

При включении этого параметра будет использоваться сетевые функции для проверки на наличие записи MX для имени хоста адреса электронной почты, который вы хотите проверить. Вы должны понимать, что это, скорее всего, замедлит выполнение вашего сценария.

 

Иногда проверка записей MX возвращает FALSE, даже если электронный адрес допустим. Причина в том, что сервер может разрешать электронный адрес, даже если он не представлен записью MX. В этом случае он представлен записями A, A6 или AAAA. Чтобы позволить Zend\Validator\EmailAddress проверить и эти остальные записи, вам необходимо установить глубокую проверку MX. Это может быть сделано при создании экземпляра установкой параметра deep, либо с использованием setOptions().

 

  1. $validator = new Zend\Validator\EmailAddress(
  2. array(
  3. 'allow' => Zend\Validator\Hostname::ALLOW_DNS,
  4. 'useMxCheck' => true,
  5. 'useDeepMxCheck' => true
  6. )
  7. );

Иногда полезно получить MX информацию сервера, чтобы использовать ее для дальнейшей обработки. Просто используйте после валидации getMXRecord(). Этот метод возвращает полученную MX запись, включая вес и сортировку по нему.

 


Предупреждение

Предупреждение о производительности

Вы должны понимать, что использование проверок MX будет замедлять ваш сценарий, поскольку используются сетевые функции. Включение глубокой проверки замедлит ваш сценарий еще сильнее, поскольку на заданном сервере будет произведен поиск 3 дополнительных типов (DNS-записей).

 

Примечание

Запрещенные IP адреса.

Следует отметить, что проверка MX разрешена только для внешних серверов. Если включена глубокая MX проверка, локальные IP адреса вроде 192.168.* или 169.254.* не допускаются.

 

Проверка интернационализированных доменных имен (IDN)

 

Zend\Validator\EmailAddress будет также сопоставлять символы национальных алфавитов, которые имеются в некоторых доменах. Эта возможность известна, как поддержка интернационализированных доменных имен (IDN). Этот параметр включен по умолчанию, хотя его можно отключить, изменив настройки через внутренний объект Zend\Validator\Hostname, который существует в Zend\Validator\EmailAddress.

 

  1. $validator->getHostnameValidator()->setValidateIdn(false);

Более подробная информация об использовании setValidateIdn() приведена в документации по Zend\Validator\Hostname.

 

Пожалуйста, обратите внимание, что IDN будут проверены, только если вы разрешите валидацию DNS имен хостов.

 

Проверка доменов верхнего уровня (TLD)

 

По умолчанию имя хоста будет проверено в списке известных доменов верхнего уровня (TLD). Этот параметр включен по умолчанию, хотя его можно отключить, изменив настройки через внутренний объект Zend\Validator\Hostname, который существует в Zend\Validator\EmailAddress.

 

  1. $validator->getHostnameValidator()->setValidateTld(false);

Более подробная информация об использовании setValidateTld() приведена в документации по Zend\Validator\Hostname.

 

Пожалуйста, обратите внимание, что TLD будут проверены, только если вы разрешите валидацию DNS имен хостов.

 

Настройка сообщений

 

Zend\Validator\EmailAddress осуществляет проверку части электронного адреса, содержащей имя хоста, используя Zend\Validator\Hostname. Как и в Zend Framework 1.10 вы можете просто установить сообщения для  Zend\Validator\Hostname из Zend\Validator\EmailAddress.

 

  1. $validator = new Zend\Validator\EmailAddress();
  2. $validator->setMessages(
  3. array(
  4. Zend\Validator\Hostname::UNKNOWN_TLD => 'I don\'t know the TLD you gave'
  5. )
  6. );

В Zend Framework ниже 1.10 нужно было подключить сообщения к вашему собственному Zend\Validator\Hostname, а затем установить этот валидатор в Zend\Validator\EmailAddress для того, чтобы возвращать ваши собственные сообщения.

 


GreaterThan (больше, чем)

 

Zend\Validator\GreaterThan позволяет проверить, является ли заданная величина большей минимального порогового значения.

 

Примечание

 

Zend\Validator\GreaterThan поддерживает только числа

Следует отметить, что Zend\Validator\GreaterThan поддерживает проверку исключительно чисел. Строки или даты не могут быть проверены этим валидатором.

 

Поддерживаемые параметры для Zend\Validator\GreaterThan

 

Для Zend\Validator\GreaterThan поддерживаются следующие параметры:

inclusive (включительно): определяет, должна ли проверка включать минимальное пороговое значение. По умолчанию - FALSE.

•  min (минимум): устанавливает минимально допустимое значение.

 

Основы использования:

Чтобы проверить, является ли заданное значение большим, чем определенное пороговое, просто используйте следующий пример:

 

  1. $valid = new Zend\Validator\GreaterThan(array('min' => 10));
  2. $value = 8;
  3. $return = $valid->isValid($value);
  4. // вернет false

Приведенный выше пример вернет TRUE для всех значений, которые больше 10.

 

Проверка, включающая пороговое значение

 

Иногда полезно проверить некоторую величину, включая пороговое значение. Смотрите следующий пример:

 

  1. $valid = new Zend\Validator\GreaterThan(
  2. array(
  3. 'min' => 10,
  4. 'inclusive' => true
  5. )
  6. );
  7. $value = 10;
  8. $result = $valid->isValid($value);
  9. // вернет true

Пример, практически эквивалентный нашему первому примеру, но мы включили пороговое значение. Теперь значение '10' допускается, и вернет TRUE.

 

 

 

 


Hex (шестнадцатеричные символы)

 

Zend\Validator\Hex позволяет проверить, содержит ли заданное значение исключительно шестнадцатеричные символы. Все эти символы от 0 до 9 и от A до F чувствительны к регистру. Нет ограничений на длину входных данных, которые вы хотите проверить.

 

  1. $validator = new Zend\Validator\Hex();
  2. if ($validator->isValid('123ABC')) {
  3. // значение содержит только шестнадцетеричные символы
  4. } else {
  5. // false
  6. }

Примечание

 

Недопустимые символы

Все другие символы вернут false, включая пробел и десятичную точку. Также нуль в unicode и числа для скриптов не на латинице не будут обработаны, как валидные.

 

Поддерживаемые параметры для Zend\Validator\Hex

 

Для Zend\Validator\Hex нет поддерживаемых параметров.

 

 

 

 


Hostname (имя хоста)

 

Zend\Validator\Hostname позволяет проверить имя хоста на соответствие набору известных спецификаций. Доступна проверка для трех различных типов имен хостов: DNS имен хостов (например, domain.com), IP адреса (например, 1.2.3.4), и локальных имен хостов (например, localhost). По умолчанию сопоставляются только DNS имена хостов.

 

Поддерживаемые параметры для Zend\Validator\Hostname

 

Для Zend\Validator\Hostname поддерживаются следующие параметры:

allow (разрешения): задает вид имени хоста, разрешенный для использования. Смотрите подробности в Hostname types.

idn (интернационализированные доменные имена):  определяет, разрешены ли домены с интернационализированными доменными именами, или нет. По умолчанию, значение этого параметра - TRUE.

ip (межсетевой протокол): позволяет задать свой собственный ip-валидатор. Значение этого параметра по умолчанию - новый экземпляр Zend\Validator\Ip.

•  tld (домены верхнего уровня): определяет, будут ли проверены домены верхнего уровня. По умолчанию, значение этого параметра - TRUE.

 

Основы использования

 

Простой пример использования:

 

  1. $validator = new Zend\Validator\Hostname();
  2. if ($validator->isValid($hostname)) {
  3. // имя хоста допустимо
  4. } else {
  5. // имя хоста недопустимо; печатать причины
  6. // hostname is invalid; print the reasons
  7. foreach ($validator->getMessages() as $message) {
  8. echo "$message\n";
  9. }
  10. }

Здесь будет сопоставленно имя хоста $hostname и в случае неудачи getMessages() заполнится полезными сообщениями об ошибках.

 

Проверка различных типов имен

 

Вы можете захотеть сопоставить IP адреса, локальные имена, или комбинацию всех допустимых типов. Это можно сделать путем передачи соответствующего параметра в Zend\Validator\Hostname при создании его экземпляра. Параметр должен быть целым числом, которое определяет, какие типы имен допускаются. В этих целях рекомендуется использовать константы Zend\Validator\Hostname.

 

Zend\Validator\Hostname содержит следующие константы: ALLOW_DNS для проверки только DNS имени хоста, ALLOW_IP для проверки IP адресов, ALLOW_LOCAL для проверки локальных имен, ALLOW_URI для разрешения адресов, совместимых с RFC3986, и ALLOW_ALL  для разрешения всех четырех вышеуказанных типов.

 

Примечание

Дополнительная информация по ALLOW_URI

ALLOW_URI позволяет проверить имена согласно RFC3986. Эти зарегистрированные имена используются WINS, NetInfo, а также, как локальные имена хостов, которые определены в вашем файле .hosts.

 

Для того, чтобы просто проверить IP адрес, используйте пример ниже:

 

  1. $validator = new Zend\Validator\Hostname(Zend\Validator\Hostname::ALLOW_IP);
  2. if ($validator->isValid($hostname)) {
  3. // имя хоста допустимо
  4. } else {
  5. // имя хоста недопустимо; печатать причины
  6. foreach ($validator->getMessages() as $message) {
  7. echo "$message\n";
  8. }
  9. }

Также, используя ALLOW_ALL, чтобы разрешить все принятые типы имен, вы можете сочетать все эти типы в комбинации. Например, чтобы разрешить DNS и локальные имена хостов, создайте экземпляр класса Zend\Validator\Hostname следующим образом:

 

  1. $validator = new Zend\Validator\Hostname(Zend\Validator\Hostname::ALLOW_DNS |
  2. Zend\Validator\Hostname::ALLOW_IP);

Проверка интернационализированных доменных имен (IDN)

 

Некоторые национальные домены верхнего уровня (ccTLDs), такие, как 'de' (Германия), поддерживают символы национального алфавита в доменных именах. Они известны, как интернационализированные доменные имена (IDN). Такие домены могут быть сопоставлены Zend\Validator\Hostname с помощью расширенного набора символов, использующегося в процессе проверки.

 

Примечание

IDN домены

На сегодняшний день поддерживается более 50 национальных доменов верхнего уровня в области интернационализированных доменных имен.

 

Сопоставить IDN домены настолько же просто, как с помощью стандартного валидатора имен, поскольку сопоставление IDN включено по умолчанию. Если вы хотите отключить проверку IDN, это можно сделать либо передав соответствующий параметр в конструктор Zend\Validator\Hostname, либо с помощью метода setValidateIdn().

 

Вы можете отключить проверку IDN, передав второй параметр в конструктор Zend\Validator\Hostname следующим образом:

 

  1. $validator =
  2. new Zend\Validator\Hostname(
  3. array(
  4. 'allow' => Zend\Validator\Hostname::ALLOW_DNS,
  5. 'useIdnCheck' => false
  6. )
  7. );

Вы можете передать TRUE, либо FALSE в setValidateIdn(), чтобы включить, или отключить проверку IDN. Если вы пытаетесь сопоставить имя IDN, которое на данный момент не поддерживается, скорее всего, оно не пройдет проверку, если содержит символы национального алфавита. Если файл национального домена верхнего уровня, указывающий дополнительные символы, отсутствует в Zend/Validator/Hostname, будет выполнена обычная проверка имени хоста.

 

Примечание

Валидация IDN

Обратите внимание, что IDN будут проверены, только если вы разрешите проверку DNS имени хоста.

 

Проверка доменов верхнего уровня

 

По умолчанию, имя хоста будет проверено на принадлежность списку TLD, доменов верхнего уровня. Если эта функnbsp;/spannbsp; Zend\Validator\Hostname из Zend\Validator\EmailAddress./spanspan style=span style=/spanpspan style=// имя хоста допустимо циональность не требуется, она может быть отключена, подобно отключению поддержки IDN. Вы можете отключить поддержку TLD, передав третий параметр в конструктор Zend\Validator\Hostname. В приведенном ниже примере мы поддерживаем проверку IDN с помощью второго параметра.

 

  1. $validator =
  2. new Zend\Validator\Hostname(
  3. array(
  4. 'allow' => Zend\Validator\Hostname::ALLOW_DNS,
  5. 'useIdnCheck' => true,
  6. 'useTldCheck' => false
  7. )
  8. );

В качестве альтернативы, вы можете передать TRUE или FALSE в setValidateTld(), чтобы включить, или отключить проверку TLD.

 

Примечание

Проверка TLD

Пожалуйста, отметьте, что TLD будут проверяться только в том случае, если вы разрешите проверку DNS имени хоста.

 

 

 

 


Iban (международный номер банковского счета)

 

Zend\Validator\Iban проверяет, может ли быть заданное значение номером IBAN. IBAN - это аббревиатура для "International Bank Account Number" (международный номер банковского счета).

 

Поддерживаемые параметры для Zend\Validator\Iban

 

Для Zend\Validator\Iban поддерживаются следующие параметры:

locale (локаль): задает локаль, которая используется для получения формата IBAN для валидации.

 

Валидация IBAN

 

Номер IBAN всегда зависит от страны. Это означает, что в разных странах используются различные форматы для их номера IBAN. Это причина, по которой для номера IBAN всегда нужна локаль. Зная это, мы понимаем, как использовать Zend\Validator\Iban.

 

Общая локаль приложения

 

Мы можем использовать общепрограммную локаль. Это значит, что если не задан соответствующий параметр при создании экземпляра, Zend\Validator\Iban будет выполнять поиск в общепрограммной локали. Смотрите следующий фрагмент кода:

 

  1. // при начальной загрузке
  2. Locale::setDefault('de_AT');
  3. // в модуле
  4. $validator = new Zend\Validator\Iban();
  5. if ($validator->isValid('AT611904300234573201')) {
  6. // IBAN валиден
  7. } else {
  8. // IBAN невалиден
  9. }


Общая локаль приложения

Конечно, это работает только в том случае, если общая локаль приложения была установлена в реестре заранее. В противном случае, в качестве локали будет использована та локаль, которую отослал клиент, или же, если ничего не было отослано, будет использоваться локаль окружения. Имейте в виду, что это может привести к нежелательному поведению при валидации.

 

Упрощенная проверка IBAN

 

Иногда полезно просто проверить, является ли заданное значение номером IBAN, или нет. Это значит, что вы не хотите проверять его для определенной страны. Это можно сделать, указав FALSE в качестве локали.

 

  1. $validator = new Zend\Validator\Iban(array('locale' => false));
  2. // Примечание: вы можете также установить FALSE, как единственный параметр
  3. if ($validator->isValid('AT611904300234573201')) {
  4. // IBAN валиден
  5. } else {
  6. // IBAN невалиден
  7. }

Таким образом, любой номер IBAN будет валидным. Обратите внимание, что так не нужно делать, если вы принимаете счета только одной страны.

 

Валидация IBAN для известных регионов

 

Для проверки в отношении определенной страны, вам нужно просто задать желаемую локаль.  Вы можете это сделать с помощью параметра locale, или впоследствии, с помощью setLocale().

 

  1. $validator = new Zend\Validator\Iban(array('locale' => 'de_AT'));
  2. if ($validator->isValid('AT611904300234573201')) {
  3. // IBAN валиден
  4. } else {
  5. // IBAN невалиден
  6. }

Примечание

 

Используйте полную спецификацию локали

Вы должны задать полную спецификацию локали, в противном случае страна может быть определена некорректно, поскольку есть языки, на которых говорят во многих странах.

 

 

 

 


Identical (идентичность)

 

Zend\Validator\Identical позволяет проверить, является ли предоставленное значение идентичным искомому.

 

Поддерживаемые параметры для Zend\Validator\Identical

 

Для Zend\Validator\Identical поддерживаются следующие параметры:

strict (строгая проверка): определяет, должна ли производиться строгая проверка. Значение по умолчанию - TRUE.

token (признак): устанавливает признак, по которому будет произведена валидация входных данных.

 

Основы использования

 

Чтобы проверить, совпадают ли два значения, необходимо установить исходное значение, как значение, по которому ведется поиск. Смотрите следующий пример, который проверяет две строки.

 

  1. $valid = new Zend\Validator\Identical('origin');
  2. if ($valid->isValid($value) {
  3. return true;
  4. }

Проверка вернет TRUE только в том случае, если оба значения идентичны на 100%. В нашем примере - если $value будет равно 'origin'.

 

Вы можете сами впоследствии установить желаемый token (признак) с помощью метода setToken() и получить актуальный набор признаков с помощью getToken().

 

Идентичные объекты

 

Конечно, Zend\Validator\Identical может проверить не только строки, но и другие типы переменных, как Boolean, Integer, Float, Array или даже объекты. Как уже отмечалось, значение, по которому производится сравнение, и сравниваемое значение должны быть идентичны.

 

  1. $valid = new Zend\Validator\Identical(123);
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }



 

Тип сравнения

Вы должны знать, что тип переменной также используется для проверки. Это означает, что строка '3' не идентична целому 3. Если вы хотите такую не строгую проверку, вы должны установить параметр strict.

 

Элементы формы

 

Zend\Validator\Identical поддерживает также сравнение элементов формы. Это можно сделать, используя имя элемента в качестве признака (token). Смотрите следующий пример:

 

  1. $form->addElement('password', 'elementOne');
  2. $form->addElement('password', 'elementTwo', array(
  3. 'validators' => array(
  4. array('identical', false, array('token' => 'elementOne'))
  5. )
  6. ));

При использовании имени элемента из первого элемента, как признака (token) для второго элемента, валидатор проверяет, эквивалентен ли второй элемент первому. В случае, если пользователь не введет двух одинаковых значений, вы получите ошибку валидации.

 

Строгая проверка

 

Как упоминалось ранее, Zend\Validator\Identical производит строгую проверку по признаку. Вы можете изменить это поведение с помощью параметра strict. Значение этого параметра по умолчанию - TRUE.

 

  1. $valid = new Zend\Validator\Identical(array('token' => 123, 'strict' => FALSE));
  2. $input = '123';
  3. if ($valid->isValid($input)) {
  4. // входные данные валидны
  5. } else {
  6. // входные данные не валидны
  7. }

Отличием от предыдущего примера является то, что проверка в этом случае вернет TRUE, даже если сравнивать целое со строковым значением, пока их содержимое идентично, но отличается по типу.

 

Для удобства, вы можете также использовать setStrict() и getStrict().

 

Конфигурирация

 

Как и все другие валидаторы, Zend\Validator\Identical поддерживает использование параметров конфигурации в качестве входных параметров. Это означает, что вы можете настроить этот валидатор с помощью экземпляра Traversable.

 

Но это добавляет еще один случай, о котором вы должны знать. Если вы используете массив в качестве значений для сравнения, вы должны обернуть его ключем 'token', если он должен содержать только один элемент.

 

  1. $valid = new Zend\Validator\Identical(array('token' => 123));
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }

Приведенный выше пример проверяет целое 123. Причина этого особого случая в том, что вы можете настроить признак для сравнения (token), который должен быть использован, задав ключ 'token'.

 

Итак, если ваши значения для сравнения содержат один элемент, и этот элемент называется 'token', то вы должны обернуть его, как в примере ниже.

 

  1. $valid = new Zend\Validator\Identical(array('token' => array('token' => 123)));
  2. if ($valid->isValid($input)) {
  3. // входные данные валидны
  4. } else {
  5. // входные данные не валидны
  6. }



InArray (в массиве)

 

Zend\Validator\InArray позволяет проверить, находится ли заданное значение в массиве. Также можно проверять многомерные массивы.

 

Поддерживаемые параметры для Zend\Validator\InArray

 

Для Zend\Validator\InArray поддерживаются следующие параметры:

haystack (значения для поиска): устанавливает значения для поиска для валидации.

recursive (рекурсивно): определяет, должна ли быть проверка рекурсивной. По умолчанию, значение этого параметра - FALSE.

strict (строгая проверка): три режима сравнения предлагаются, в силу часто недооцениваемой и потенциально опасной уязвимости при проверке строки ввода от пользователя.

    • InArray :: COMPARE_STRICT

      это нормальное строгое сравнение in_array с проверкой значения и типа.

    • InArray::COMPARE_NOT_STRICT

      это нормальное не строгое сравнение in_array, которое проверяет только значение.li style=(/pfont-weight:normal;vertical-align:topspan style=font:normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:topdiv style==font-weight:normal;vertical-align:top

 

Предупреждение

 

Этот режим может давать ложные срабатывания, когда строки сравниваются с целыми или числами с плавающей запятой, в силу поведения in_array по преобразованию строк в целые в подобных случаях. Таким образом, "foo" превратится в 0, "43foo" превратится в 43, а "foo43" превратится в 0.

 

    • InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY

      Для исправления вышеуказанного предупреждения, этот режим дает золотую середину, которая позволяет строки представлять числами для успешного сопоставления строк с их целыми аналогами, и наоборот. Например, "0" будет успешно совпадать с 0, но "foo" не будет совпадать с 0, как это случилось бы в режиме *COMPARE_NOT_STRICT*. Это наиболее безопасный вариант для валидации входных данных под web, и он установлен по умолчанию.

Определяет, должна ли выполняться строгая проверка. По умолчанию, значение этого параметра - FALSE.

 

Простая проверка массива

 

Самый простой способ - это задать массив, в котором необходимо произвести поиск, при создании экземпляра:

 

  1. $validator = new Zend\Validator\InArray(array('haystack' => array('value1', 'value2',...'valueN')));
  2. if ($validator->isValid('value')) {
  3. // значение найдено
  4. } else {
  5. // значение не найдено
  6. }

Поведение такое же, как у метода PHP in_array().

 

Примечание

 

По умолчанию, такая проверка не является строгой и не может проверить многомерный массив.

 

В качестве альтернативы, вы можете задать массив для проверки после конструирования объекта с помощью метода setHaystack(). Метод getHaystack() возвращает фактический массив значений для поиска.

 

  1. $validator = new ZendValidatorInArray();
  2. $validator->setHaystack(array('value1', 'value2',...'valueN'));
  3. if ($validator->isValid('value')) {
  4. // значение найдено
  5. } else {
  6. // значений не найдено
  7. }

Режимы проверки массива

 

Как упоминалось, возможно наличие уязвимостей при использовании по умолчанию не строгого режима сравнения, поэтому вместо того, чтобы ограничивать разработчиков, мы решили предложить как строгое, так и не строгое сравнение и добавили безопасную золотую середину.

 

Можно установить строгий режим при создании экземпляра, либо впоследствии методом setStrict. InArray::COMPARE_STRICT соответствует true, а InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY соответсвует false.

 

  1. // по умолчанию, InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY
  2. $validator = new Zend\Validator\InArray(
  3. array(
  4. 'haystack' => array('value1', 'value2',...'valueN'),
  5. )
  6. );
  7. // установить строгий режим
  8. $validator = new Zend\Validator\InArray(
  9. array(
  10. 'haystack' => array('value1', 'value2',...'valueN'),
  11. 'strict' => InArray::COMPARE_STRICT // соответствует ``true``
  12. )
  13. );
  14. // установить не строгий режим
  15. $validator = new Zend\Validator\InArray(
  16. array(
  17. 'haystack' => array('value1', 'value2',...'valueN'),
  18. 'strict' => InArray:COMPARE_NOT_STRICT // соответствует ``false``
  19. )
  20. );
  21. // или
  22. $validator->setStrict(InArray::COMPARE_STRICT);
  23. $validator->setStrict(InArray::COMPARE_NOT_STRICT);
  24. $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);

Примечание

 

Обратите внимание, что значение по умолчанию для параметра strict - FALSE.

 

Рекурсивная проверка массива

 

В дополнение методу PHP in_array() этот валидатор может быть использован для проверки многомерных массивов.

 

Для проверки многомерных массивов необходимо установить параметр recursive.

 

 

  1. $validator = new Zend\Validator\InArray(
  2. array(
  3. 'haystack' => array(
  4. 'firstDimension' => array('value1', 'value2',...'valueN'),
  5. 'secondDimension' => array('foo1', 'foo2',...'fooN')),
  6. 'recursive' => true
  7. )
  8. );
  9. if ($validator->isValid('value')) {
  10. // значение найдено
  11. } else {
  12. // значение не найдено
  13. }

Массив будет проверен рекурсивно, чтобы узнать, содержит ли он заданное значение. Кроме того, можно использовать setRecursive(), чтобы установить этот параметр впоследствии, и getRecursive(), чтобы получить его.

 

  1. $validator = new Zend\Validator\InArray(
  2. array(
  3. 'firstDimension' => array('value1', 'value2',...'valueN'),
  4. 'secondDimension' => array('foo1', 'foo2',...'fooN')
  5. )
  6. );
  7. $validator->setRecursive(true);
  8. if ($validator->isValid('value')) {
  9. // значение найдено
  10. } else {
  11. // значение не найдено
  12. }

Примечание

 

Настройки по умолчанию для рекурсии

По умолчанию рекурсивная проверка выключена.

 

Примечание

 

Ключи параметров в массиве

При использовании ключей ‘haystack‘, ‘strict‘ или ‘recursive‘ в массиве, вы должны обернуть ключ haystack.

 

 

 

 



Ip

 

Zend\Validator\Ip позволяет проверить, является ли заданное значение IP адресом. Он поддерживает определения IPv4, IPv6 и IPvFeature.

 

Поддерживаемые параметры для Zend\Validator\Ip.

 

Для Zend\Validator\Ip поддерживаются следующие параметры:

allowipv4 (разрешить IPv4): позволяет задать для валидатора  IPv4 адреса. По умолчанию, значение этого параметра - TRUE.

allowipv6 (разрешить IPv6): позволяет задать для валидатора IPv6 адреса. По умолчанию, значение этого параметра - TRUE.

allowipvfuture (разрешить IPvFuture): позволяет задать для валидатора IPvFuture адреса. По умолчанию, значение этого параметра - TRUE.

allowliteral (разрешить литералы): позволяют задать для валидатора IPv6 или IPvFuture в стиле URI литералов (IP адрес, заключенный в скобки). По умолчанию, значение этого параметра - TRUE.

 

Основы использования

 

Простой пример использования:

 

  1. $validator = new Zend\Validator\Ip();
  2. if ($validator->isValid($ip)) {
  3. // ip адрес валиден
  4. } else {
  5. // ip адрес не валиден; печатать причины
  6. }

Примечание

 

Невалидные IP адреса

Имейте в виду, что Zend\Validator\Ip проверяет только IP адреса. Адреса вида ‘mydomain.com‘ или ‘192.168.50.1/index.html‘ не являются валидными IP адресами. Это либо имена хостов, либо валидные URL, но не IP адреса.

 

Примечание

 

Валидация IPv6/IPvFuture

Zend\Validator\Ip проверяет IPv6/IPvFuture адреса с помощью регулярных выражений. Причина в том, что фильтры и методы PHP сами не соответствуют RFC. Многие другие имеющиеся классы также не соответствуют ему.

 

Проверка только IPv4 или IPV6

 

Иногда нужно проверить только один из доступных форматов. Например, если ваша сеть поддерживает только IPv4. В этом случае бессмысленно было бы разрешать IPv6 для этой проверки.

 

Чтобы ограничить Zend\Validator\Ip одним протоколом, установите параметр allowipv4 или allowipv6 в FALSE. Вы можете сделать это, передав параметр в конструктор, либо используя setOptions() впоследствии.

 

  1. $validator = new Zend\Validator\Ip(array('allowipv6' => false));
  2. if ($validator->isValid($ip)) {
  3. // ip является валидным ipv4 адресом
  4. } else {
  5. // ip не является валидным ipv4 адресом
  6. }

Примечание

 

Поведение по умолчанию

По умолчанию, Zend\Validator\Ip следует обоим стандартам.

 

 

 

 



ISBN (универсальный номер книжного издания)

 

Zend\Validator\Isbn позволяет проверить значения  ISBN-10 или  ISBN-13.

 

Поддерживаемые параметры для Zend\Validator\Isbn

 

Для Zend\Validator\Isbn поддерживаются следующие параметры:

separator (разделитель): определяет допустимый разделитель для номера ISBN. По умолчанию, это пустая строка.

type (тип): определяет допустимый тип ISBN. Значение по умолчанию - Zend\Validator\Isbn::AUTO. Более подробная информация приведена далее в этом разделе.

 

Основы использования

 

Простой пример использования:

 

  1. $validator = new Zend\Validator\Isbn();
  2. if ($validator->isValid($isbn)) {
  3. // isbn валиден
  4. } else {
  5. // isbn не валиден
  6. }

Так можно проверить любые ISBN-10 и ISBN-13 без разделителя.

 

Настройка явной проверки типа ISBN

 

Пример ограничений на тип ISBN:

 

  1. $validator = new Zend\Validator\Isbn();
  2. $validator->setType(Zend\Validator\Isbn::ISBN13);
  3. // или
  4. $validator = new Zend\Validator\Isbn(array(
  5. 'type' => Zend\Validator\Isbn::ISBN13,
  6. ));
  7. if ($validator->isValid($isbn)) {
  8. // это валидное значение ISBN-13
  9. } else {
  10. // это не валидное значение ISBN-13
  11. }

Приведенный выше пример проверяет значение только ISBN-13.

 

Допустимые типы:

 

• Zend\Validator\Isbn::AUTO (по умолчанию)

• Zend\Validator\Isbn::ISBN10

• Zend\Validator\Isbn::ISBN13

 

Конкретизация ограничений на разделитель:

 

Пример ограничения на разделитель:

 

  1. $validator = new Zend\Validator\Isbn();
  2. $validator->setSeparator('-');
  3. // или
  4. $validator = new Zend\Validator\Isbn(array(
  5. 'separator' => '-',
  6. ));
  7. if ($validator->isValid($isbn)) {
  8. // это валидный ISBN с разделителем
  9. } else {
  10. // это не валидный ISBN с разделителем
  11. }

Примечание

 

Значения без разделителя

Будет возвращено FALSE, если $isbn не содержит разделитель, или, если это недопустимое значение ISBN.

 

Допустимые разделители:

"" (пустой) (по умолчанию)

"-" (дефис)

" " (пробел)

 

 

 

 



LessThan (меньше, чем)

 

Zend\Validator\LessThan позволяет проверить, является ли заданная величина меньшей максимального порогового значения.

 

Примечание

 

Zend\Validator\LessThan поддерживает проверку исключительно чисел

Следует отметить, что Zend\Validator\LessThan поддерживает проверку исключительно чисел. Строки или даты не могут быть проверены этим валидатором.

 

Поддерживаемые параметры для for Zend\Validator\LessThan

 

Для for Zend\Validator\LessThan поддерживаются следующие параметры:

inclusive (включительно): определяет, должна ли проверка включать максимальное пороговое значение. По умолчанию - FALSE.

•  min (минимум): устанавливает максимально допустимое значение.

 

Основы использования

 

Чтобы проверить, является ли заданное значение меньшим, чем определенное пороговое, просто используйте следующий пример:

 

  1. $valid = new Zend\Validator\LessThan(array('max' => 10));
  2. $value = 12;
  3. $return = $valid->isValid($value);
  4. // вернет false

Приведенный выше пример вернет TRUE для всех значений, которые меньше 10.

 

Проверка, включающая пороговое значение

 

Иногда полезно проверить некоторую величину, включая пороговое значение. Смотрите следующий пример:

 

 

  1. $valid = new Zend\Validator\LessThan(
  2. array(
  3. 'max' => 10,
  4. 'inclusive' => true
  5. )
  6. );
  7. $value = 10;
  8. $result = $valid->isValid($value);
  9. // вернет true

Пример, практически эквивалентный нашему первому примеру, но мы включили пороговое значение. Теперь значение '10' допускается, и вернет TRUE.

 

 

 

 



NotEmpty (не пусто)

 

Этот валидатор позволяет проверить, не пусто ли заданное значение. Это часто бывает полезно при работе с элементами формы или другого источника пользовательского ввода, где вы можете использовать его, чтобы убедиться, что обязательные элементы имеют сопоставленные с ними значения.

 

Поддерживаемые параметры для Zend\Validator\NotEmpty

 

Для Zend\Validator\NotEmpty поддерживаются следующие параметры:

type (тип): устанавливает тип проверки, которая будет проводиться. Более подробная информация приведена далее в этом разделе.

 

Поведение по умолчанию для Zend\Validator\NotEmpty

 

По умолчанию, работа этого валидатора отличается от ожидаемой вами работы PHP функции empty(). В частности, этот валидатор будет расценивать как целое 0, так и строку '0', как пустые.

 

  1. $valid = new Zend\Validator\NotEmpty();
  2. $value = '';
  3. $result = $valid->isValid($value);
  4. // вернет false

Примечание

 

Поведение по умолчанию отличается от поведения функции PHP empty()

Без указания конфигурации, поведение  Zend\Validator\NotEmpty отличается от поведения функции PHP empty().

 

Изменение поведения Zend\Validator\NotEmpty

 

У некоторых проектов различные мнения о том, что считать "пустым" значением: строку, содержащую только пробел, можно считать пустой, или 0 считать не пустым (в частности, для логических последовательностей). Для удовлетворения различных потребностей, Zend\Validator\NotEmpty позволяет настроить, какие типы должны быть подтверждены, как пустые, а какие нет.

 

Следующие типы могут быть обработаны:

boolean:          вернет FALSE, если логическое значение равно FALSE.

integer:            вернет FALSE, если целое задано, как 0. По умолчанию эта проверка не активирована, и возвращает TRUE для любого целочисленного значения.

float:                 вернет FALSE, если число с плавающей запятой задано, как 0.0. По умолчанию эта проверка не активирована, и возвращает TRUE для любого числа с плавающей запятой.

string:              вернет FALSE, если задана пустая строка ''.

zero:                 вернет FALSE, если задан один нулевой ('0') символ.

empty_array:  вернет FALSE, если задан пустой массив.

null:                  вернет FALSE, если задан NULL.

php:                  вернет FALSE в тех же случаях, когда функция PHP empty() вернет TRUE.

space:             вернет FALSE, если заданная строка содержит только символы пробела.

object:             вернет TRUE. Вернет FALSE, если задан объект, но он не разрешен.

object_string: вернет FALSE, если задан объект, и его метод __toString() вернет пустую строку.

object_count: вернет FALSE, если задан объект, он реализует интерфейс Countable, и количество элементов объекта равно 0.

all:                    вернет FALSE для всех перечисленных выше типов.

 

Все остальные значения будут возвращать TRUE по умолчанию.

 

Есть несколько способов выбрать, какие из перечисленных выше типов будут проверяться. Вы можете задать один или несколько типов, и добавить их, вы можете задать массив, вы можете использовать константы, или можете задать текстовую строку. Смотрите следующие примеры:

 

  1. // вернет false для 0
  2. $validator = new Zend\Validator\NotEmpty(Zend\Validator\NotEmpty::INTEGER);
  3. // вернет false для 0 или '0'
  4. $validator = new Zend\Validator\NotEmpty(
  5. Zend\Validator\NotEmpty::INTEGER + Zend\Validator\NotEmpty::ZERO
  6. );
  7. // вернет false для 0 или '0'
  8. $validator = new Zend\Validator\NotEmpty(array(
  9. Zend\Validator\NotEmpty::INTEGER,
  10. Zend\Validator\NotEmpty::ZERO
  11. ));
  12. // вернет false для 0 или '0'
  13. $validator = new Zend\Validator\NotEmpty(array(
  14. 'integer',
  15. 'zero',
  16. ));

Вы можете также предоставить экземпляр Traversable для установки желаемого типа. Для установки типа после создания экземпляра, используйте метод setType().

 

 

 

 


PostCode (почтовый индекс)

 

Zend\Validator\PostCode позволяет проверить, является ли заданное значение валидным почтовым индексом. Почтовые индексы специфичны для городов, и для некоторых локалей обозначаются термином ZIP коды.

 

Для Zend\Validator\PostCode известно более 160 различных форматов почтовых индексов. Выбрать правильный формат можно двумя способами. Вы можете использовать полное имя локали, либо можете настроить свой собственный формат вручную.

 

Использование локали более предпочтительно, поскольку Zend Framework уже знает соответствующий формат почтового индекса для каждой локали; однако, нужно использовать полное имя локали (содержащее спецификатор региона). Например, "de" - это имя локали, но оно не может быть использовано с Zend\Validator\PostCode, поскольку не включает регион; вместе с тем, “de_AT” будет действительно корректной локалью, поскольку указывается код региона (“AT”, для Австрии).

 

  1. $validator = new Zend\Validator\PostCode('de_AT');

Если вы не установите локаль самостоятельно, то Zend\Validator\PostCode будет использовать общую локаль приложения, или, если таковой не имеется, системную локаль.

 

  1. // общая локаль приложения в вашем bootstrap
  2. Locale::setDefault('de_AT');
  3. $validator = new Zend\Validator\PostCode();

Вы можете также изменить локаль впоследствии вызовом setLocale(). И, конечно же, вы можете получить актуальную локаль вызовом getLocale().

 

  1. $validator = new Zend\Validator\PostCode('de_AT');
  2. $validator->setLocale('en_GB');

Форматы почтовых индексов просто используют строки регулярных выражений. Если международный формат почтовых индексов, который использует настройки локали, не отвечает вашим потребностям, вы можете вручную установить формат вызовом метода setFormat().

 

  1. $validator = new Zend\Validator\PostCode('de_AT');
  2. $validator->setFormat('AT-\d{5}');

Примечание

 

Соглашение для самостоятельно определенных форматов

 

При использовании самостоятельно определенных форматов вы должны опустить начальный ('/^') и конечный ('$/') теги. Они будут добавлены автоматически.

 

Вы должны также знать, что форматы почтовых индексов всегда должны быть проверены строгим образом. Это значит, что они должны быть записаны изолированно, без дополнительных символов, которые не попадают под формат.

 

Параметры конструктора

 

В общих чертах, вы можете передать строку, представляющую полное имя локали, в конструктор Zend\Validator\PostCode.

 

  1. $validator = new Zend\Validator\PostCode('de_AT');
  2. $validator = new Zend\Validator\PostCode($locale);

Кроме того, вы можете передать массив или экземпляр Traversable в конструктор. Если вы поступите таким образом, вы должны включить либо ключ “locale”, либо “format”; они будут использоваться для установки соответствующих значений в объект валидатора.

 

  1. $validator = new Zend\Validator\PostCode(array(
  2. 'locale' => 'de_AT',
  3. 'format' => 'AT_\d+'
  4. ));

Поддерживаемые параметры для Zend\Validator\PostCode

 

Для Zend\Validator\PostCode поддерживаются следующие параметры:

•  format (формат): устанавливает формат почтового индекса, который будет использоваться для валидации входных данных.

locale (локаль): устанавливает локаль, для которой требуется почтовый индекс.

 



Regex (регулярное выражение)

 

Этот валидатор позволяет проверить, соответствует ли заданная строка определенному регулярному выражению.

 

Поддерживаемые параметры для Zend\Validator\Regex

 

Для Zend\Validator\Regex поддерживаются следующие параметры:

pattern (шаблон): устанавливает шаблон регулярного выражения для этого валидатора.

 

Проверка с помощью Zend\Validator\Regex

 

Проверка с помощью регулярных выражений позволяет производить сложную проверку без написания собственного валидатора. Использование регулярных выражений достаточно распространено и просто. Давайте рассмотрим некоторые примеры:

 

  1. $validator = new Zend\Validator\Regex(array('pattern' => '/^Test/');
  2. $validator->isValid("Test"); // вернет true
  3. $validator->isValid("Testing"); // вернет true
  4. $validator->isValid("Pest"); // вернет false

Как вы можете видеть, шаблон должен быть задан с тем же синтаксисом, что и для preg_match(). Более подробную информацию о регулярных выражениях вы можете получить в руководстве PHP о синтаксисе шаблона PCRE.

 

Манипулирование шаблонами

 

Также можно установить различные шаблоны впоследствии, используя метод setPattern(), и получить актуальный установленный шаблон методом getPattern().

 

  1. $validator = new Zend\Validator\Regex(array('pattern' => '/^Test/');
  2. $validator->setPattern('ing$/');
  3. $validator->isValid("Test"); // вернет false
  4. $validator->isValid("Testing"); // вернет true
  5. $validator->isValid("Pest"); // вернет false



Sitemap Validators (валидатор карты сайта)

 

Следующие валидаторы соответствуют протоколу Sitemap XML.

 

Sitemap\Changefreq (частота обновлений страницы)

 

Проверяет, является ли валидной сторока, содержащая элемент ‘changefreq’ в документе Sitemap XML. Допустимые значения: ‘always’ (всегда), ‘hourly’ (каждый час), ‘daily’ (ежедневно), ‘weekly’ (еженедельно), ‘monthly’ (ежемесячно), ‘yearly’ (каждый год), или ‘never’ (никогда).

 

Возвращает TRUE тогда, и только тогда, когда значение является строкой, эквивалентной одному из перечисленных выше значений.

 

Sitemap\Lastmod (дата последнего изменения)

 

Проверяет, является ли валидной строка, содержащая элемент ‘lastmod’ в документе Sitemap XML. Элемент lastmod должен содержать строку с датой по спецификации W3C, при необходимости отбрасывая информацию о времени.

 

Вернет TRUE тогда, и только тогда, когда заданное значение является строкой и соответствует спецификации.

 

Валидатор карты сайта для даты последнего изменения

 

  1. $validator = new Zend\Validator\Sitemap\Lastmod();
  2. $validator->isValid('1999-11-11T22:23:52-02:00'); // true
  3. $validator->isValid('2008-05-12T00:42:52+02:00'); // true
  4. $validator->isValid('1999-11-11'); // true
  5. $validator->isValid('2008-05-12'); // true
  6. $validator->isValid('1999-11-11t22:23:52-02:00'); // false
  7. $validator->isValid('2008-05-12T00:42:60+02:00'); // false
  8. $validator->isValid('1999-13-11'); // false
  9. $validator->isValid('2008-05-32'); // false
  10. $validator->isValid('yesterday'); // false

Sitemap\Loc (адрес страницы)

 

Проверяет, является ли валидной строка, содержащая элемент ‘loc’ в документе Sitemap XML. Внутренняя реализация валидатора использует Zend\Uri\Uri::isValid(). Подробности в валидации URI.

 

Sitemap\Priority (приоритет страницы)

 

Проверяет, является ли валидной строка, содержащая элемент ‘priority’ в документе Sitemap XML. Значение должно быть десятичным, в диапазоне от 0.0 до 1.0. Этот валидатор принимает как числовые, так и строковые величины.

 

Валидатор карты сайта для приоритета страницы

 

  1. $validator = new Zend\Validator\Sitemap\Priority();
  2. $validator->isValid('0.1'); // true
  3. $validator->isValid('0.789'); // true
  4. $validator->isValid(0.8); // true
  5. $validator->isValid(1.0); // true
  6. $validator->isValid('1.1'); // false
  7. $validator->isValid('-0.4'); // false
  8. $validator->isValid(1.00001); // false
  9. $validator->isValid(0xFF); // false
  10. $validator->isValid('foo'); // false

Поддерживаемые параметры для Zend\Validator\Sitemap_*

 

Ни для одного из валидаторов Sitemap нет поддерживаемых параметров.

 

 

 

 



Step (шаг)

 

Zend\Validator\Step позволяет проверить, является ли заданное значение валидной величиной шага. Для этого валидатора требуется значение, представляющее число (также строка, целое или с плавающей запятой).

 

Поддерживаемые параметры для Zend\Validator\Step

 

Для Zend\Validator\Step поддерживаются следующие параметры:

baseValue (стартовое значение): это базовое значение, из которого должен быть вычислен шаг. По умолчанию, значение этого параметра 0.

step (шаг): это значение шага. По умолчанию, значение этого параметра 1.

 

Основы использования

 

Простой пример использования:

 

  1. $validator = new Zend\Validator\Step();
  2. if ($validator->isValid(1)) {
  3. // значение является валидной величиной шага
  4. } else {
  5. // false
  6. }

Использование значений с плавающей запятой

 

Этот валидатор поддерживает числа с плавающей запятой для значений базы и шага. Простой пример данной функциональности:

 

  1. $validator = new Zend\Validator\Step(array(
  2. 'baseValue' => 1.1,
  3. 'step' => 2.2
  4. ));
  5. echo $validator->isValid(1.1); // печатает true
  6. echo $validator->isValid(3.3); // печатает true
  7. echo $validator->isValid(3.35); // печатает false
  8. echo $validator->isValid(2.2); // печатает false


StringLength (длина строки)

 

Этот валидатор позволяет проверить, находится ли заданная строка в диапазоне определенной длины.

 

Примечание

 

Zend\Validator\StringLength поддерживает только проверку строк

Следует отметить, что Zend\Validator\StringLength поддерживает валидацию исключительно строк. Целые, числа с плавающей запятой, даты, или объекты не могут быть проверены с помощью этого валидатора.

 

Поддерживаемые параметры для Zend\Validator\StringLength

 

Для Zend\Validator\StringLength поддерживаются следующие параметры:

encoding (кодировка): устанавливает ICONV кодировку, которая должна быть использована для этой строки.

min (минимум): устанавливает минимально допустимую длину строки.

max (максимум): устанавливает максимально допустимую длину строки.

 

Поведение по умолчанию для Zend\Validator\StringLength

 

По умолчанию этот валидаcolor:#0000fftext-align:centerp style=color:#339933тор проверяет, находится ли некоторое значение между минимумом и максимумом. Но для минимума значение по умолчанию 0, а для максимума NULL, что означает "без ограничений".

 

Таким образом, по умолчанию, без указания параметров, этот валидатор только проверит, являются ли входные данные строкой.

 

Ограничение максимально допустимой длины строки

 

Чтобы ограничить максимально допустимую длину строки, необходимо установить параметр max. Он принимает целое значение в качестве входных данных.

 

  1. $validator = new Zend\Validator\StringLength(array('max' => 6));
  2. $validator->isValid("Test"); // вернет true
  3. $validator->isValid("Testing"); // вернет false

Вы можете установить максимальную длину и впоследствии, с помощью метода setMax(). И с помощью getMax() получить актуальное значение максимального порога.

 

  1. $validator = new Zend\Validator\StringLength();
  2. $validator->setMax(6);
  3. $validator->isValid("Test"); // вернет true
  4. $validator->isValid("Testing"); // вернет false

Ограничение минимально допустимой длины строки

 

Чтобы ограничить минимально допустимую длину строки, необходимо установить параметр min. Он принимает целое значение в качестве входных данных.

 

  1. $validator = new Zend\Validator\StringLength(array('min' => 5));
  2. $validator->isValid("Test"); // вернет false
  3. $validator->isValid("Testing"); // вернет true

Вы можете установить минимальную длину и впоследствии, с помощью метода setMin(). И с помощью getMin() получить актуальное значение минимального порога.

 

  1. $validator = new Zend\Validator\StringLength();
  2. $validator->setMin(5);
  3. $validator->isValid("Test"); // вернет false
  4. $validator->isValid("Testing"); // вернет true

Ограничение строки с обеих сторон

 

Иногда требуется получить строку, у которой задана не только максимальная длина, но и минимальное количество символов. Например, если у вас есть текстовое поле, где пользователь может ввести свое имя, то вы можете ограничить имя максимум 30 символами, но хотите убедиться, что он ввел свое имя. Таким образом, можно ограничить необходимую длину 3 символами. Смотрите следующий пример:

 

  1. $validator = new Zend\Validator\StringLength(array('min' => 3, 'max' => 30));
  2. $validator->isValid("."); // вернет false
  3. $validator->isValid("Test"); // вернет true
  4. $validator->isValid("Testing"); // вернет true

Примечание

 

Установка максимального порога ниже, чем минимальный порог

Если вы попытаетесь установить максимальное значение ниже, чем фактическое минимальное значение, либо минимальное значение выше, чем фактическое максимальное, будет сгенерировано исключение.

 

Кодировка значений

 

Строки всегда используют какую-либо кодировку. Даже если вы не устанавливаете кодировку явно, PHP использует ее. Если ваше приложение использует кодировку, отличную от той, что использует сам PHP, вы должны установить кодировку самостоятельно.

 

Вы можете установить кодировку при создании экземпляра с помощью параметра encoding, либо с помощью метода setEncoding(). Мы предполагаем, что ваша инсталляция соответствует ISO, и ваше приложение соответствует ISO. В этом случае вы будете наблюдать следующее поведение.

 

  1. $validator = new Zend\Validator\StringLength(
  2. array('min' => 6)
  3. );
  4. $validator->isValid("Ärger"); // вернет false
  5. $validator->setEncoding("UTF-8");
  6. $validator->isValid("Ärger"); // вернет true
  7. $validator2 = new Zend\Validator\StringLength(
  8. array('min' => 6, 'encoding' => 'UTF-8')
  9. );
  10. $validator2->isValid("Ärger"); // вернет true

Поэтому, если ваша инсталляция и ваше приложение используют различные кодировки, вы всегда должны устанавливать кодировку самостоятельно.

/spanspan style=span style=