Валидация данных в PHP: от встроенных функций до профессиональных библиотек
Валидация данных — один из краеугольных камней безопасного и стабильного веб-приложения. В PHP существует множество подходов: от простых встроенных функций до мощных библиотек, реализующих паттерн «Цепочка ответственности» (Chain of Responsibility) и поддерживающих сложные сценарии проверки. В этой статье мы разберём три популярных инструмента для валидации на PHP: Respect\Validation, Symfony Validator и Aura.Filter, а также напомним о встроенных возможностях языка.
1. Встроенные функции PHP
Прежде чем подключать сторонние библиотеки, стоит вспомнить, что PHP предоставляет базовые инструменты для фильтрации и проверки данных:
filter_var()— проверка и очистка данных по фильтрам (email, URL, integer и т.д.)preg_match()— проверка по регулярным выражениямempty(),is_numeric(),strlen()— простые проверкиctype_alpha(),ctype_digit()— проверка набора символов
Пример использования filter_var:
<?php
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email корректен";
} else {
echo "Некорректный email";
}
?>
2. Respect\Validation
Respect\Validation — одна из самых популярных библиотек для валидации в PHP. Её главное преимущество — читаемый, цепочечный синтаксис (fluent interface) и огромное количество готовых правил (более 100).
Установка
composer require respect/validation
Пример использования
<?php
use Respect\Validation\Validator as v;
$user = [
'name' => 'Иван',
'email' => 'ivan@test.com',
'age' => 25,
'website' => 'https://example.com'
];
$validator = v::key('name', v::stringType()->length(2, 50))
->key('email', v::email())
->key('age', v::intType()->between(18, 120))
->key('website', v::optional(v::url()));
try {
$validator->assert($user);
echo "Данные валидны!";
} catch (\Respect\Validation\Exceptions\NestedValidationException $e) {
print_r($e->getMessages());
}
?>
Библиотека поддерживает кастомные сообщения об ошибках, вложенную валидацию массивов, а также позволяет комбинировать правила через allOf(), oneOf() и noneOf().
3. Symfony Validator
Компонент Symfony Validator — часть экосистемы Symfony, но может использоваться и отдельно. Это промышленный стандарт для валидации сложных структур данных с поддержкой аннотаций, XML и YAML конфигураций.
Установка
composer require symfony/validator
Пример с использованием атрибутов (PHP 8+)
<?php
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;
class User
{
#[Assert\NotBlank]
#[Assert\Length(min: 2, max: 50)]
public string $name;
#[Assert\NotBlank]
#[Assert\Email]
public string $email;
#[Assert\NotBlank]
#[Assert\Positive]
#[Assert\LessThan(150)]
public int $age;
}
$user = new User();
$user->name = 'Иван';
$user->email = 'ivan@test.com';
$user->age = 25;
$validator = Validation::createValidatorBuilder()
->enableAttributeMapping()
->getValidator();
$violations = $validator->validate($user);
if (count($violations) === 0) {
echo "Валидация пройдена!";
} else {
foreach ($violations as $violation) {
echo $violation->getPropertyPath() . ': ' . $violation->getMessage() . "\n";
}
}
?>
Symfony Validator поддерживает группы валидации, каскадную проверку вложенных объектов, а также интеграцию с Doctrine ORM и формами Symfony.
4. Aura.Filter
Aura.Filter — легковесная библиотека для фильтрации и валидации данных. В отличие от предыдущих, она разделяет процессы фильтрации (очистки) и валидации (проверки), что удобно при работе с пользовательским вводом.
Установка
composer require aura/filter
Пример использования
<?php