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

inkz8wg9  于 2023-03-16  发布在  PHP
关注(0)|答案(2)|浏览(106)

我想验证一个变量是一个数组还是一个匹配正则表达式的字符串。这可以用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
}

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

wf82jlnq

wf82jlnq1#

我能想到的最“优雅”的解决方法是创建一个自定义验证规则,但是您也可以尝试有条件地添加数组和正则表达式规则。
但是,检查变量的类型以添加适当的规则这一显而易见的操作又如何呢?

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

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

$validation = Validator::make($data, $rules);

快速而简单,但这是对数组检查的浪费,而且总是会给予正则表达式错误消息。

yxyvkwin

yxyvkwin2#

如果有些人仍然需要:我的解决方案(在Laravel9中)是使用prepareForValidation函数在验证发生之前将偶尔出现的字符串转换为数组。

protected function prepareForValidation()
{
    if(! is_array($this->images)) {
        $this->images = [$this->images];
    }
}

相关问题