You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel请求正则验证:如何验证含数组字段的所有元素

Laravel 全局正则验证包含数组字段的实现方案

你之前用'*' => Config::get('regex.regexStr')的方式只能验证顶级的非数组字段,当请求里有数组类型字段时,因为数组本身不符合字符串正则规则,会触发验证错误,同时数组内的元素也没被校验到。可以通过以下几种方式解决:

1. 已知数组字段名时,直接指定数组元素规则

如果提前知道请求中的数组字段名称,比如tags、items,可以在验证规则中单独添加数组元素的匹配规则:

$request->validate([
    // 验证所有顶级非数组字段
    '*' => Config::get('regex.regexStr'),
    // 验证数组tags下的每个元素
    'tags.*' => Config::get('regex.regexStr'),
    // 若有多个数组字段,依次添加
    'items.*' => Config::get('regex.regexStr'),
]);

2. 未知数组字段名时,动态生成验证规则

如果无法提前确定数组字段的名称,可以遍历请求的所有字段,根据字段类型动态生成验证规则:

$regexRule = Config::get('regex.regexStr');
$rules = [];

foreach ($request->all() as $field => $value) {
    if (is_array($value)) {
        // 数组字段:给每个子元素添加正则规则
        $rules["{$field}.*"] = $regexRule;
    } else {
        // 普通字段:直接添加正则规则
        $rules[$field] = $regexRule;
    }
}

$request->validate($rules);

3. 处理多层嵌套数组的情况

如果请求中存在多层嵌套的数组,可以通过递归函数生成全量的验证规则,确保每个层级的元素都被校验:

function buildRegexValidationRules(array $requestData, string $prefix = '', string $rule): array
{
    $rules = [];
    foreach ($requestData as $key => $value) {
        $currentField = $prefix ? "{$prefix}.{$key}" : $key;
        if (is_array($value)) {
            // 递归处理嵌套数组
            $rules = array_merge($rules, buildRegexValidationRules($value, $currentField, $rule));
            // 可选:验证当前数组字段本身是合法数组
            $rules[$currentField] = 'array';
        } else {
            // 普通字段添加正则规则
            $rules[$currentField] = $rule;
        }
    }
    return $rules;
}

// 生成规则并执行验证
$regexRule = Config::get('regex.regexStr');
$validationRules = buildRegexValidationRules($request->all(), '', $regexRule);
$request->validate($validationRules);

内容的提问来源于stack exchange,提问作者Lune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:52:16