Symfony 5 原有正常运行的Regex Validator正则验证器突然失效问题
问题根因
你调用验证器时指定了仅执行registration分组的验证规则,但@Assert\Regex注解没有配置对应的分组,因此属于默认分组的Regex规则不会被触发,仅配置了分组的@Assert\NotBlank能正常执行。
解决方案
给所有需要在注册场景生效的Regex注解补充groups参数即可,修改后的Entity代码示例如下:
/** * @var string * * @ORM\Column(name="firstname", type="string", length=30, nullable=false, options={"comment"="input#text&[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}@Prénom"}) * @Assert\NotBlank ( * message="Le champs [prénom] ne peut être vide", * groups={"registration"} * ) * @Assert\Regex ( * pattern="/^[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}$/", * message="Champs prénom : La saisie est invalide (min: 2, max: 30)", * groups={"registration"} * ) */ private $firstname; /** * @var string * * @ORM\Column(name="lastname", type="string", length=30, nullable=false, options={"comment"="input#text&[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}@Nom"}) * @Assert\NotBlank ( * message="Le champs [nom] ne peut être vide", * groups={"registration"} * ) * @Assert\Regex ( * pattern="/^[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}$/", * message="Champs nom : La saisie est invalide (min: 2, max: 30)", * groups={"registration"} * ) */ private $lastname;
其他排查方向(如果修改后仍不生效)
- 检查实体对应字段的setter方法,确认没有自动修剪输入、转义特殊字符的逻辑,避免你传入的测试内容被修改后刚好匹配正则规则
- 手动执行
preg_match测试正则和输入内容的匹配结果,排除正则本身写法问题 - 如果使用Symfony 6及以上版本,建议将注解改为PHP原生属性写法,避免
doctrine/annotations依赖异常导致的注解加载问题
内容的提问来源于stack exchange,提问作者Haamome
相关产品推荐
相关产品推荐

