Php Symfony约束:用于解析的正则表达式
我正在尝试验证一个参数结构,该结构应与以下值匹配:Php Symfony约束:用于解析的正则表达式,php,regex,symfony,Php,Regex,Symfony,我正在尝试验证一个参数结构,该结构应与以下值匹配:1200x800、1200x、x800或干脆x 因此,我使用以下约束: 'size' => [ new Assert\NotBlank(), new Assert\Regex([ 'pattern' => '/(\d+)?x(\d+)?/i' ]) ], 作为一个独立的组件,
1200x800
、1200x
、x800
或干脆x
因此,我使用以下约束:
'size' => [
new Assert\NotBlank(),
new Assert\Regex([
'pattern' => '/(\d+)?x(\d+)?/i'
])
],
作为一个独立的组件,它可以正常工作,但在symfony约束内,它也匹配类似于1200x800x500
的情况。
我猜在幕后它使用了preg_match_?这可以解释为什么使用:preg_match_all('/(\d+)?x(\d+)?/i',$data['size'],$size)代码>,给出以下结果:
array:3 [▼
0 => array:2 [▼
0 => "1500x800"
1 => "x500"
]
1 => array:2 [▼
0 => "1500"
1 => ""
]
2 => array:2 [▼
0 => "800"
1 => "500"
]
]
有没有办法让它在第一次发生时就停止?基本上只允许:1200x800
,1200x
,x800
或简单地x
您可以设置^
字符串的开头和$
字符串的结尾在正则表达式中锚定:
/^(\d+)?x(\d+)$/i
您可以使用单词边界\b(\d+)?x(\d+)?\b
请参见“尼斯”,它已修复。我认为这是一个symfony的东西,因为它在regex小提琴中的效果与预期一样。