Laravel 5输入验证,名称正则表达式

时间:2017-02-21 10:38:40

标签: php laravel validation laravel-5

我正在尝试进行输入数组验证。现在我有了这个:

$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或者通过某种扩展吗?

2 个答案:

答案 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