我正在尝试进行输入数组验证。现在我有了这个:
$rules = [
'name' => 'required|array',
];
if(array_key_exists('name', $data) && is_array($data['name'])) {
foreach ($data['name'] as $key => $value) {
$rules['name.' . $key] = 'required|nullable|string|max:255';
}
}
$v = Validator::make($data, $rules);
此代码有效,但我想确保密钥也正确。我可以在foreach
循环中添加更多检查,但这会使验证器本身无用,因为手动检查所有内容会更简单。
完美地说,我希望实现这样的目标:
$v = Validator::make($data, [
'name' => 'required|array',
'name.[a-z]{2}' => 'required|nullable|string|max:255'
]);
可以通过Validator
或者通过某种扩展吗?
答案 0 :(得分:2)
你可以这样做:
在Validator::extend('customrule', function ($attribute, $value, $parameters, $validator) {
return is_array($value) && !empty(array_filter($value, function ($v) { return preg_match("/^[a-z]{2}$/",$v); });
});
扩展您的验证码以包含此规则:
$rules = [
'name' => 'required|array',
'name.*' => 'required|nullable|string|max:255'
];
$extraRules = [
'namekeys' => 'customrule'
];
$v = Validator::make($data, $rules);
if ($v->valid()) {
$v2 = Validator::make(["namekeys" => array_keys($data["name"]) ], $extraRules);
}
然后在你的代码中:
using Microsoft.Extensions.DependencyInjection;
也许我只是过于复杂化了。
答案 1 :(得分:1)
当然,你可以写name.*
:
$v = Validator::make($data, [
'name' => 'required|array',
'name.*' => 'required|nullable|string|max:255'
]);
以下是Laravel Validating Arrays Docs