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

如何结合SELECT与LOCATE实现违禁词匹配及字符串包含检测?

违禁词检测组合查询方案

可以通过一条SQL查询同时实现两种检测逻辑:一是用户输入的词(或相似片段)匹配违禁词表中的条目,二是违禁词表中的词作为子串存在于用户输入里。以下是具体实现:

核心组合查询

用OR连接两种判断条件,结合LIKE和LOCATE()函数:

SELECT ID, Word 
FROM profanities 
WHERE Word LIKE CONCAT('%', '$user_input', '%')  -- 检测输入词是否是违禁词的一部分(比如输入"ana"匹配"Banana")
   OR LOCATE(Word, '$user_input') > 0;           -- 检测违禁词是否包含在输入词中(比如输入"AllBananas"匹配"Banana")

逻辑说明

  • 第一个条件Word LIKE CONCAT('%', '$user_input', '%'):对应你需要的“输入词(或相似词)是否存在于违禁词表”的检测,比如用户输入“Pine”会匹配到“Pineapple”;
  • 第二个条件LOCATE(Word, '$user_input') > 0:只要违禁词是用户输入的子串,就会被匹配,比如输入“BananaMelon”会同时命中“Banana”和“Melon”;
  • 注意:必须对$user_input做SQL注入防护,比如使用预编译语句,不要直接拼接字符串到SQL中。

可选优化:忽略大小写

如果需要不区分大小写检测(比如输入“banana”也能匹配“Banana”),可以用LOWER()统一转换字符大小写:

SELECT ID, Word 
FROM profanities 
WHERE LOWER(Word) LIKE CONCAT('%', LOWER('$user_input'), '%')
   OR LOCATE(LOWER(Word), LOWER('$user_input')) > 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:32:06