正则表达式
验证值是否与正则表达式匹配。
应用于 | 属性或方法 |
类 | 正则表达式 |
验证器 | 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;
}
注意
与大多数其他约束一样,null
和空字符串被认为是有效值。这是为了允许它们成为可选值。如果该值是强制性的,一个常见的解决方案是将此约束与 NotBlank 结合使用。
选项
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 函数,以便在验证期间忽略前导和尾随空格。