Валидация данных в PHP: Полное руководство по инструментам и библиотекам

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Валидация данных в 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                    

Рекомендаций