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

Max*_*eat 3 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 ($validation->fails()) {
    // This is getting executed because it is not an array
} else {
    // Do something else
}
Run Code Online (Sandbox Code Playgroud)

我已经通过使用 2 个不同的验证器对象(每个对象具有一个条件)并检查其中一个是否通过来解决方法,但我想知道 Laravel 中是否有更“优雅”的解决方案。

Joh*_*pis 5

我能想到的最“优雅”的解决方法是创建自定义验证规则,但您也可以尝试有条件地添加数组和正则表达式规则

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

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

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

$validation = Validator::make($data, $rules);
Run Code Online (Sandbox Code Playgroud)

快速而简单,但它浪费了数组检查,并且总是会给出正则表达式错误消息。