敏感词过滤
最近在项目中遇到这样一个需求,一个中文敏感词数组chineseWords,一个英文敏感词数组englishWords,现在有用户聊天中输入的一句话,这句话有三种情况:
1,全是中文和标点符号
2,全是英文加标点符号
3,中英文标点符号混合
现在要判断这句话是不是包含敏感词的(中文或英文),如果包含即为敏感语句。具体需求说明如下:
首先把判断一个语句是否是敏感语句的功能封装成一个npm包,这样无论在哪个项目中需要此功能直接导入使用就可以了。(不会封装npm包的可参考此教程 https://segmentfault.com/a/1190000011095467)
npm包的核心代码如下:
const chineseWords = ['小穴', '寻乐论坛', '小姐威客网', '小姐信息', '二b'] const englishWords = ['zoophilia', 'yiffy', 'yeasty', 'yaoi', 'sb'] const judgeSensitiveWords = (str) => { // 如果存在敏感词就返回true , 不存在返回false let flag = false // 判断中文 for (let i = 0; i < chineseWords.length; i += 1) { if (str.indexOf(chineseWords[i]) !== -1) { // 说明中文中包含敏感词 flag = true break } } if (flag === false) { // 如果中文中没有敏感词就继续判断英文 const reg = /[a-zA-Z]+/ig // match方法返回的是由匹配结果组成的数组,即语句中所有连写的英文都将被筛选出来,如果没有匹配的会返回null const resultS2 = str.match(reg) // console.log('judgeSensitiveWords(str) ', resultS2) if (resultS2) { for (let i = 0; i < englishWords.length; i += 1) { if (resultS2.indexOf(englishWords[i]) !== -1) { flag = true break } } } } return flag } export default judgeSensitiveWords
使用如下:
// @dby-h5-clients/judge-sensitive-words即为npm包中package.json文件中的name import judgeSensitiveWords from '@dby-h5-clients/judge-sensitive-words' onChatMsg: (content) => { // console.log('judgeSensitiveWords(str) ', judgeSensitiveWords(content)) if (judgeSensitiveWords(content)) { // 更新到 store store.chatList.add({ msg: content, username: store.selfUserInfo.nickname, timestamp: Date.now(), role: store.selfUserInfo.role, uid: store.selfUserInfo.uid, }) } else { // 发送到 apps stepConnectAPPSServer.finish.then((apps) => { apps.sendChat(content) }) } },
这样此功能就实现了。