Symfony 6中Sonata表单正则验证失效问题求助
问题原因及解决方法
你的正则表达式在Symfony Sonata表单中失效,核心是两处逻辑错误,无需额外配置即可修复:
match参数逻辑颠倒
你设置了'match' => false,这表示输入不匹配正则时才会通过验证,但你的提示信息明确要求输入必须符合AA-123-BB格式,因此需要将match改为true,表示输入必须匹配正则才算验证通过。正则未锚定完整字符串
当前正则/[A-Z]{2}-[0-9]{3}-[A-Z]{2}/会匹配字符串中任意位置符合格式的片段,比如XAA-123-BBX这类包含目标格式但整体不符合的内容也会被判定为匹配。需要添加^(字符串开头)和$(字符串结尾)锚定符,确保整个输入严格符合格式要求:/^[A-Z]{2}-[0-9]{3}-[A-Z]{2}$/
修正后的代码如下:
$form->add('licensePlate', TextType::class, [ 'constraints' => new Assert\Regex([ 'pattern' => '/^[A-Z]{2}-[0-9]{3}-[A-Z]{2}$/', 'match' => true, 'message' => '车牌格式必须为 AA-123-BB', ]) ]);
如果需要支持大小写不敏感(比如用户输入小写字母也能通过验证),可以给正则添加i修饰符:
'pattern' => '/^[A-Z]{2}-[0-9]{3}-[A-Z]{2}$/i',
内容的提问来源于stack exchange,提问作者IleNea
相关产品推荐
相关产品推荐

