Regex

Дата обновления перевода 2024-07-25

Regex

Валидирует, что значение совпадает с регулярным выражением.

??????????? ? ???????? ??? ??????
????? Regex
????????? RegexValidator

Базовое применение

Представьте, что у вас есть поле description, и вы хотите верифицировать, что оно начинается с валидного символа. Регулярное выражение для тестирования этого будет /^\w+/, обозначающее, что вы ищете хотя бы один или больше символов вначале вашей строки:

1
2
3
4
5
6
7
8
9
10
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Regex('/^\w+/')]
    protected string $description;
}

Как вариант, вы можете установить опцию match, как false, чтобы требовать, чтобы заданная строка не совпадала. В следующем примере вы будете требовать, чтобы поле firstName не содержало цифр и дадите ему пользовательское сообщение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Regex(
        pattern: '/\d/',
        match: false,
        message: 'Your name cannot contain a number',
    )]
    protected string $firstName;
}

Note

As with most of the other constraints, null and empty strings are considered valid values. This is to allow them to be optional values. If the value is mandatory, a common solution is to combine this constraint with NotBlank.

Опции

groups

type: array | string default: null

It defines the validation group or groups of this constraint. Read more about validation groups.

htmlPattern

тип: string|boolean по умолчанию: null

Эта опция указывает схему для использования в атрибуте HTML5 pattern. Вы обычно не должны указывать эту опцию, так как по умолчанию, ограничение будет конвертировать данную схему в опцию pattern, совместимую со схемой HTML5. Это означает, что разграничители удаляются (например, /[a-z]+/ становится [a-z]+).

Однако, существуют некоторые другие несовместимости между двумя схемами, которые не могут быть исправлены ограничением. Например, атрибут HTML5 pattern не поддерживает отметки. Если у вас есть схема вроде /[a-z]+/i, то вам нужно указать схему, совместимую с HTML5 в опции htmlPattern:

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Regex(
        pattern: '/^[a-z]+$/i',
        htmlPattern: '^[a-zA-Z]+$'
    )]
    protected string $name;
}

Установив htmlPattern, как "false", вы отключите валидацию клиентской стороны.

match

тип: boolean по умолчанию: true

Если true (или не установлена), этот валидатор передаст совпадения заданной строки в заданное регулярное выражение pattern. Однако, когда эта опция установлена, как false, то произойдёт обратное: валидация пройдёт только, если заданная строка не совпадает с регулярным выражением pattern.

message

тип: string по умолчанию: Это значение не валидно.

Сообщение, отображаемое, если валидатор терпит неудачу.

Вы можете использовать следующие параметры в сообщении:

???????? ????????
{{ value }} ??????? (??????????) ????????
{{ label }} ??????????????? ????? ???? ?????
{{ pattern }} ????????? ??????????? ??????

pattern

тип: string [опция по умолчанию ]

Эта обязательная опция является схемой регулярного выражения, с которой будет сопоставлен ввод. По умолчанию, этот валидатор будет неудачным, если строка ввода не совпадает с этим регулярным выражением (через PHP-функцию preg_match). Однако, если match установлена, как "false", то валидатор потерпит неудачу, если строка совпадает с этой схемой.

normalizer

type: a PHP callable default: null

This option allows to define the PHP callable applied to the given value before checking if it is valid.

For example, you may want to pass the 'trim' string to apply the trim PHP function in order to ignore leading and trailing whitespace during validation.

Дата обновления перевода 2024-07-25

payload

тип: mixed по умолчанию: null

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

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