【问题标题】:Laravel 5 input validation with name regular expressionLaravel 5 输入验证与名称正则表达式
【发布时间】:2017-07-10 22:30:57
【问题描述】:

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

$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 或者它的某些扩展是否有可能?

【问题讨论】:

    标签: php laravel validation laravel-5


    【解决方案1】:

    当然,你可以写name.*

    $v = Validator::make($data, [
      'name' => 'required|array',
      'name.*' => 'required|nullable|string|max:255'
    ]);
    

    这里是 Laravel Validating Arrays Docs

    【讨论】:

    • 谢谢,看来我在阅读文档时错过了这篇文章。但这仍然不包括我需要验证数组键的情况。
    【解决方案2】:

    你可以这样做:

    在您的 AppServiceProvider.php 中扩展您的验证器以包含此规则:

    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);
    }
    

    也许我只是把事情复杂化了。

    【讨论】:

    • 感谢您的解决方案,我将继续寻找更简单的解决方案,但这个解决方案肯定比我的更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多