如何检查用户输入字符串中是否包含给定列表内的匹配词汇
Dart 违规词正则匹配实现方案
基础实现(子串匹配,忽略大小写)
只要输入文本包含违规词子串即判定命中,代码如下:
List<String> badWords = [ "bad", "damn", // 还包含其他各类违规词汇 ]; String text = msgController.text; // 遍历匹配实现 for (var badWord in badWords) { // 正则配置:caseSensitive设为false表示忽略大小写匹配 RegExp matchReg = RegExp(badWord, caseSensitive: false); if (matchReg.hasMatch(text)) { print("匹配到违规词:$badWord"); // 如需匹配到第一个就终止后续检测,放开下方注释 // break; } } // 如果你偏好使用map写法,可参考如下实现 badWords.map((e) { RegExp matchReg = RegExp(e, caseSensitive: false); if (matchReg.hasMatch(text)) { print("匹配到违规词:$e"); } }).toList();
进阶场景优化
场景1:精确匹配整词,避免误判
如果不希望badminton这类包含违规词子串的正常词汇被误命中,可给正则添加单词边界规则:
// \b为正则单词边界标识符,需用raw字符串避免转义 RegExp matchReg = RegExp(r'\b' + badWord + r'\b', caseSensitive: false);
场景2:违规词包含正则特殊字符
如果违规词列表中存在. * + ?这类正则特殊字符,需要先转义再生成正则,避免匹配异常:
RegExp matchReg = RegExp(RegExp.escape(badWord), caseSensitive: false);
内容的提问来源于stack exchange,提问作者Brightcode
相关产品推荐
相关产品推荐

