php - 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 ($validation->fails()) {
    // This is getting executed because it is not an array
} else {
    // Do something else
}

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

最佳答案

我能想到的最“优雅”的解决方法是创建一个 Custom Validation Rule , 但你也可以试试 conditionally adding the array and the regex rules .

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

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

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

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

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

关于php - Laravel:如何验证变量是数组还是匹配正则表达式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302495/

相关文章:

php - 如何使用 PHP 和 MYSQL 查看以 BLOB 格式存储的图像

php - 使用 PHP 在 HTML 邮件中应用 CSS

validation - 在 GO 中使用标准包验证 URL

javascript - 需要一个允许所有特殊字符的密码验证正则表达式

php - 如何在 Laravel 中存储关联数组

php - 如何使用 php mysql 从一组重复名称中仅获取一个值

php - 按一列分组并显示另一列的所有结果

c# - 单元测试一个类使用特定的验证类进行实体验证是否是一种不好的做法?

php - Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的

php - 无法在 Laravel 的 index.php 之外命中断点