Php Laravel:如何验证变量是与正则表达式匹配的数组还是字符串

Php Laravel:如何验证变量是与正则表达式匹配的数组还是字符串,php,validation,laravel,Php,Validation,Laravel,我想验证一个变量是数组还是与正则表达式匹配的字符串。这可以通过使用Laravel验证的单一规则实现吗 下面是我想要的一个例子: // Does not work because the validation tries to match ALL conditions $rules = [ 'keys' => 'array|regex:\d+' ]; $validation = Validator::make(['keys' => '12345'], $rules); if

我想验证一个变量是数组还是与正则表达式匹配的字符串。这可以通过使用Laravel验证的单一规则实现吗

下面是我想要的一个例子:

// Does not work because the validation tries to match ALL conditions
$rules = [
    'keys' => 'array|regex:\d+'
];

$validation = Validator::make(['keys' => '12345'], $rules);

if ($validation->fails()) {
    // This is getting executed because it is not an array
} else {
    // Do something else
}
我已经有了一个解决方案,使用两个不同的验证器对象(每个对象都有一个条件)并检查其中一个是否通过,但我想知道是否有一个更“优雅”的解决方案内置于Laravel。

我能想到的最“优雅”的解决方案是创建一个,但您也可以尝试

但是显而易见的是,检查变量的类型以添加适当的规则如何

//dummy data, could be from $request->all()
$data = ['keys' => '12345'];

$rules = [
    'keys' => is_array($data['keys']) ? 'array' : 'regex:\d+'
];

$validation = Validator::make($data, $rules);
快速且简单,但这是对数组检查的浪费,并且总是会给出regex错误消息