Laravel中如何实现不区分大小写的关键词过滤验证规则?
Laravel关键词过滤规则大小写不敏感修复方案
你的代码里Str::contains默认是区分大小写的,所以像"Video"这类大小写变体的关键词没法被检测到,给你几个简单的修复方案:
方案1:利用Str::contains的大小写参数
Laravel的Str::contains方法支持第三个参数控制是否区分大小写,把它设为false即可:
public function passes($attribute, $value) { return ! collect(explode(' ', $value))->contains(function ($word){ return Str::contains($word, ['video'], false); }); }
方案2:统一转小写匹配
如果你的Laravel版本较旧,不支持第三个参数,可以把输入的单词和关键词都转成小写后再匹配,兼容性更强:
public function passes($attribute, $value) { return ! collect(explode(' ', $value))->contains(function ($word){ return Str::contains(strtolower($word), ['video']); }); }
要是你不需要按空格拆分单词,想直接检查整个字符串里是否包含关键词(不管位置),还可以更简化:
public function passes($attribute, $value) { return ! Str::contains(strtolower($value), ['video']); }
内容的提问来源于stack exchange,提问作者japahen
相关产品推荐
相关产品推荐

