Regex

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

Применяется к свойству или методу
Опции
Класс Regex
Валидатор RegexValidator

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

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

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\Regex("/^\w+/")
         */
        protected $description;
    }
    
  • YAML
    1
    2
    3
    4
    5
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Author:
        properties:
            description:
                - Regex: '/^\w+/'
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Author">
            <property name="description">
                <constraint name="Regex">
                    <option name="pattern">/^\w+/</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('description', new Assert\Regex(array(
                'pattern' => '/^\w+/',
            )));
        }
    }
    

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

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\Regex(
         *     pattern="/\d/",
         *     match=false,
         *     message="Ваше имя не может содержать цифру"
         * )
         */
        protected $firstName;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Author:
        properties:
            firstName:
                - Regex:
                    pattern: '/\d/'
                    match:   false
                    message: Ваше имя не может содержать цифру
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Author">
            <property name="firstName">
                <constraint name="Regex">
                    <option name="pattern">/\d/</option>
                    <option name="match">false</option>
                    <option name="message">Ваше имя не может содержать цифру</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('firstName', new Assert\Regex(array(
                'pattern' => '/\d/',
                'match'   => false,
                'message' => 'Ваше имя не может содержать цифру',
            )));
        }
    }
    

Опции

pattern

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

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

htmlPattern

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

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

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

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\Regex(
         *     pattern     = "/^[a-z]+$/i",
         *     htmlPattern = "^[a-zA-Z]+$"
         * )
         */
        protected $name;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Author:
        properties:
            name:
                - Regex:
                    pattern: '/^[a-z]+$/i'
                    htmlPattern: '^[a-zA-Z]+$'
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Author">
            <property name="name">
                <constraint name="Regex">
                    <option name="pattern">/^[a-z]+$/i</option>
                    <option name="htmlPattern">^[a-zA-Z]+$</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('name', new Assert\Regex(array(
                'pattern'     => '/^[a-z]+$/i',
                'htmlPattern' => '^[a-zA-Z]+$',
            )));
        }
    }
    

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

match

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

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

message

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

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

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.