Validator
Описание
с версии 0.4.0
с версии 0.5.0 добавлена поддержка методаarrayInput($callback)
c версии 1.0.0 переименованы правилаStringвStringInput,FloatвFloatInput
с версии 7.7.0 изменён синтаксисValidatorBuilder, и переименован вValidatorForm, добавленValidatorChain
с версии 7.7.4 изменено поведение при вызове валидаторов черезValidator::__staticCall, теперь возвращаетсяValidatorChain
Пакет Validator предназначен для проверки входных данных. Пакет разработан с использование исходного кода проекта https://github.com/Respect/Validation, к сожалению, не получилось адаптировать данный пакет для использования его AS IS.
Настройки
Глобальных настроек нет
Использование
Подключение класса Validator:
use \Bluz\Validator\Validator;
Простой пример использования валидатора:
if (!Validator::string()->validate(123)) { echo "It must be a string"; }
Используя альтернативный синтаксис с вызовом __invoke():
if (!Validator::string()(123)) { echo "It must be a string"; }
Цепочка правил
if (!Validator::string()->length(5, 10)->validate('foo bar')) { echo "String must have a length between 5 and 10"; }
Повторное использование
$validator = Validator::string()->length(25, 40); if (!$validator->validate('foo bar')) { echo "String must have a length between 25 and 40\n"; } if (!$validator->validate('baz qux')) { echo "String must have a length between 25 and 40\n"; }
Альтернативный вариант с использованием __invoke():
$numberValidator = Validator::integer()->min(25)->max(40); if (!$numberValidator(5)) { echo "Number should be integer between 25 and 40\n"; } if (!$numberValidator(42)) { echo "Number should be integer between 25 and 40\n"; }
Текст ошибок и правила проверки
Получение описания правил для проверки:
$validator = Validator::string()->length(25, 40); echo $validator; // >> must be a string // >> must have a length between 25 and 40
Замена описания для всей цепочки вызовов:
$validator = Validator::string()->length(25, 40)->setDescription('description'); echo $validator; // >> description
Получение текста ошибки цепочки:
$validator = Validator::string()->length(25, 40); if (!$validator->validate('foo bar')) { echo $validator->getError(); }
Установка произвольного текста ошибки для regexp и callback правил:
// method Validator::create return new instance of ValidatorChain $validator = Validator::create()-> ->regexp('/[a-z]/', 'Password must contain lowercase letters') ->regexp('/[A-Z]/', 'Password must contain uppercase letters') ->regexp('/[0-9]/', 'Password must contain numbers ') echo $validator; // >> Password must contain lowercase letters // >> Password must contain uppercase letters // >> Password must contain numbers if (!$validator->validate('123456')) { echo $validator->getError(); }
Проверка массива
Для проверки ассоциативного массива следует использовать ValidatorForm:
$validator = new ValidatorForm(); // title validator $validator->add('title') ->required() ->string() ->notEmpty(); // alias validator $validator->add('alias') ->required() ->string() ->notEmpty() ->regexp('/^[a-zA-Z0-9_\.\-]+$/i', 'Alias should contains only Latin characters, dots and dashes') ->callback( function($input) use ($data) { if ($row = $this->getTable()->findRowWhere(['alias' => $input])) { if ($row->id != $data['id']) { return false; } } return true; }, 'Alias already exists' ); if (!$validator->validate($data)) { $validator->getErrors(); }
Список доступных правил
-
alpha($additionalCharacters = '')- проверка на буквы алфавита, внутри используетсяctype_alpha, с соответствующей зависимостью от установленной локали дляLC_CTYPE, разрешает пробельные символы -
alphaNumeric($additionalCharacters = '')- проверка на буквы алфавита и цифры, внутри используетсяctype_alnum, разрешает пробельные символы -
array($callback)- проверка массива любой callable структурой (это может быть как встроенная функция, так и другое правило из данного пакета) -
between($min, $max, $inclusive = false)- проверка на вхождение в диапазон -
callback($callback, $description = '')- проверка с использованием функции обратного вызова, поддерживается всеcallableструктуры -
condition($condition)- для проверки используется произвольное условие -
contains($containsValue)- содержит заданный элемент -
containsStrict($containsValue)- содержит заданный элемент -
countryCode()- проверка на ISO 3166-1 alpha-2 -
creditCard()- проверка номера кредитной карточки алгоритмом Луна -
date($format)- проверка даты на соответствие заданному формату -
domain($checkDns = false)- проверка доменного имени -
email($checkDns = false)- проверка email -
equals($compareTo, $identical = false)- сравнение с заданным значением -
float()- число с плавающей запятой -
in($haystack)- вхождение в заданный массив данных - массив или строку -
inStrict($haystack)- вхождение в заданный массив данных - массив или строку -
integer()- целое число -
ip($options = null)- проверка IP адреса, можно задать диапазон для проверки -
json()- строка с JSON -
latin($additionalCharacters = '')- проверка на буквы латинского алфавита, запрещает пробельные символы -
latinNumeric($additionalCharacters = '')- проверка на буквы латинского алфавита и цифры, запрещает пробельные символы -
length($min = null, $max = null, $inclusive = true)- проверка длины строки или массива -
less($maxValue)- проверка максимального значения -
lessOrEqual($maxValue)- проверка максимального значения -
more($minValue)- проверка минимального значения -
moreOrEqual($minValue)- проверка минимального значения -
notEmpty()- не пустое значение, обёртка надempty() -
noWhitespace()- без пробелов -
numeric()- число -
required()- обязательное поле, отсеивает поisset(), и сравнению сnull,falseи пустой строкой -
regexp($expression, $description = '')- проверка по регулярному выражению -
string()- строка
Подключение новых правил
Для подключения новых правил валидации следует вызвать статический метод Validator::addRuleNamespace($namespace) и добавить неймспейс с вашими правилами, правила подключаться автоматически:
use Bluz\Validator\Validator; Validator::addRuleNamespace('\\MyNameSpace\\Rule\\'); // your class \MyNameSpace\Rule\MyCustomRule // should load by composer autoloader Validator::myCustom()->validate($input);