正则表达式
验证值是否与正则表达式匹配。
| 应用于 | 属性或方法 |
| 类 | 正则表达式 |
| 验证器 | 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 函数,以便在验证期间忽略前导和尾随空格。