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

Laravel中为name及name_*模式字段设置通用验证规则的方法

实现匹配name及name_*字段的通用验证规则

Laravel默认规则里的name*写法并非用来匹配字段名前缀,它是针对数组类型字段(比如name[])的通配符,所以只会对第一个name字段生效。要实现你的需求,可以用以下几种方法:

方法1:使用Rule::forEach(Laravel 8+)

先筛选出请求中符合规则的字段,再给每个字段绑定验证规则:

use Illuminate\Validation\Rule;

$request = request();
// 过滤出name及name_开头的字段
$targetFields = collect($request->all())
    ->filter(fn($value, $key) => $key === 'name' || str_starts_with($key, 'name_'))
    ->keys()
    ->toArray();

$rules = [
    Rule::forEach($targetFields, fn($field) => [$field => 'required|min:3|max:120'])
];

方法2:手动构建规则数组

直接遍历请求字段,逐个判断并添加规则:

$request = request();
$rules = [];

foreach ($request->all() as $key => $value) {
    if ($key === 'name' || str_starts_with($key, 'name_')) {
        $rules[$key] = 'required|min:3|max:120';
    }
}

// 可继续补充其他字段的规则
$rules['description'] = '...';
$rules['keywords'] = '...';

方法3:正则匹配字段名

如果需要更灵活的匹配逻辑,用正则判断字段名:

$rules = [];
foreach (request()->all() as $key => $value) {
    // 正则匹配name或name_xxx格式的字段
    if (preg_match('/^name(_.*)?$/', $key)) {
        $rules[$key] = 'required|min:3|max:120';
    }
}

以上方法都能给所有符合name、name_fruit、name_animal等模式的字段统一应用验证规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:35:23