Php 无法验证laravel中的嵌套数组

Php 无法验证laravel中的嵌套数组,php,laravel,Php,Laravel,验证具有相同键和规则的嵌套数组时,将拾取错误的错误消息,例如,如果规则为: $rules = [ 'elem.*.test' => 'required', 'elem.*.subitem.test' => 'required', ]; 以及: $messages = [ 'elem.*.test.required' => 'top level item required', 'elem.*.subitem.test.required' => 'sub item requ

验证具有相同键和规则的嵌套数组时,将拾取错误的错误消息,例如,如果规则为:

$rules = [ 'elem.*.test' => 'required', 'elem.*.subitem.test' =>
'required', ];
以及:

$messages = [ 'elem.*.test.required' => 'top level item required', 'elem.*.subitem.test.required' => 'sub item required', ];
$messages = [
    'elem.*.subitem.test.required' => 'sub item required',
    'elem.*.test.required' => 'top level item required'
];
Str::is()
在FormatsMessages::getFromLocalArray()中调用

你不能用

str_replace('*', '[^.]*', $sourceKey) 
因为它被preg_quote()转义

你可以加一个

$wildcard = '.*'  
在FormatsMessages::getFromLocalArray()中调用
Str::is()
的参数,并用
'[^.]*'
Str::is()
重写它

你不能用

str_replace('*', '[^.]*', $sourceKey) 
因为它被preg_quote()转义

你可以加一个

$wildcard = '.*'  
参数设置为
Str::is()
,并用
'[^.]*'

覆盖它这是一个已知问题:

您可以通过交换消息来修复它:

$messages = [ 'elem.*.test.required' => 'top level item required', 'elem.*.subitem.test.required' => 'sub item required', ];
$messages = [
    'elem.*.subitem.test.required' => 'sub item required',
    'elem.*.test.required' => 'top level item required'
];
这是一个已知的问题:

您可以通过交换消息来修复它:

$messages = [ 'elem.*.test.required' => 'top level item required', 'elem.*.subitem.test.required' => 'sub item required', ];
$messages = [
    'elem.*.subitem.test.required' => 'sub item required',
    'elem.*.test.required' => 'top level item required'
];

你能展示你的正则表达式吗?@MaratBadykov它是$pattern=str_replace('*','.*',$pattern);你能展示你的正则表达式吗?@MaratBadykov它是$pattern=str_replace('*','.*',$pattern);