跳到内容

正则表达式

编辑此页

验证值是否与正则表达式匹配。

基本用法

假设你有一个 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;
}

注意

与大多数其他约束一样,null 和空字符串被认为是有效值。这是为了允许它们成为可选值。如果该值是强制性的,一个常见的解决方案是将此约束与 NotBlank 结合使用。

选项

groups

类型: array | string 默认值: null

它定义了此约束的验证组。阅读更多关于 验证组 的信息。

htmlPattern

类型: string|null 默认值: null

此选项指定要在 HTML5 pattern 属性中使用的模式。你通常不需要指定此选项,因为默认情况下,约束会将 pattern 选项中给定的模式转换为 HTML5 兼容模式。值得注意的是,分隔符被删除,并且锚点是隐式的(例如,/^[a-z]+$/ 变为 [a-z]+,而 /[a-z]+/ 变为 .*[a-z]+.*)。

但是,HTML5 模式与正则表达式模式之间存在一些其他不兼容之处,约束无法修复这些不兼容性。例如,HTML5 pattern 属性不支持标志。如果你有一个像 /^[a-z]+$/i 这样的模式,则需要在 htmlPattern 选项中指定 HTML5 兼容模式

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 设置为空字符串将禁用客户端验证。

match

类型: boolean 默认值: true

如果 true (或未设置),则如果给定的字符串与给定的 pattern 正则表达式匹配,则此验证器将通过。但是,当此选项设置为 false 时,情况将相反:只有当给定的字符串匹配 pattern 正则表达式时,验证才会通过。

message

类型: string 默认值: 此值无效。

这是此验证器失败时将显示的消息。

你可以在此消息中使用以下参数

参数 描述
{{ value }} 当前(无效)值
{{ label }} 相应的表单字段标签
{{ pattern }} 期望的匹配模式

pattern

类型: string [默认选项]

这个必需的选项是输入将要匹配的正则表达式模式。默认情况下,如果输入字符串匹配此正则表达式(通过 preg_match PHP 函数),则此验证器将失败。但是,如果 match 设置为 false,则如果输入字符串确实匹配此模式,则验证将失败。

normalizer

类型: 一个 PHP 可调用对象 默认值: null

此选项允许定义在检查给定值是否有效之前应用于该值的 PHP 可调用对象。

例如,你可能想要传递 'trim' 字符串以应用 trim PHP 函数,以便在验证期间忽略前导和尾随空格。

payload

类型: mixed 默认值: null

此选项可用于将任意特定于域的数据附加到约束。配置的有效负载不会被 Validator 组件使用,但其处理完全取决于你。

例如,你可能想要使用 多个错误级别,以便根据错误严重程度在前端以不同方式呈现失败的约束。

本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本