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
相关产品推荐
相关产品推荐

