在开发聊天或者留言之类的功能的时候,通常需要过滤敏感词,下面总结了两种方法。
1、迭代敏感字数组,拼接过滤敏感字正则,然后利用 replace 把匹配到的敏感字替换为*
dom结构如下:
<textarea rows="5" cols="50" id="txt1"></textarea> <br> <input type="button" value="点击生成过滤后的文字" onclick="showText()" /> <P>过滤后的文字:</P> <textarea rows="5" cols="50" id="txt2"></textarea>
js代码如下:
// 过滤敏感字方法 function filterText(Text) { // 敏感字库 var sensitiveWordsList = ["狗","草","傻比","尼玛"]; // 准备拼接的敏感字串 var sensitiveWords = ""; for(var i=0;i<sensitiveWordsList.length;i++){ if(i<sensitiveWordsList.length-1){ sensitiveWords += sensitiveWordsList[i]+"|"; }else{ sensitiveWords += sensitiveWordsList[i]; } }; // 拼接敏感字正则 eval("var reBadWords = /"+sensitiveWords+"/gi;"); // 替换敏感字 var outText = Text.replace(reBadWords, "*"); // confirm弹框 if(outText!=Text){ var r=confirm("你的留言中含有不恰当的词语,系统已自动为你修改,是否继续提交?"); if(r==true){ return outText; }else{ return ""; } }else{ return outText; } }; // 按钮点击方法 function showText() { var oInput1 = document.getElementById("txt1"); var oInput2 = document.getElementById("txt2"); oInput2.value = filterText(oInput1.value); };
2、迭代敏感字数组,将输入内容中的敏感字替换为“*”
dom结构如下:
<textarea rows="5" cols="50" id="txt1"></textarea> <br> <input type="button" value="点击生成过滤后的文字" onclick="showText()" /> <P>过滤后的文字:</P> <textarea rows="5" cols="50" id="txt2"></textarea>
js代码如下:
// 过滤敏感字方法 function filterText(Text) { // 敏感词库 var sensitiveWordsList = ["狗","草","傻比","尼玛"]; // 过滤后的文字 var outText = ""; // 遍历敏感词库,替换为*,并把处理后的文字赋值给outText for(var i=0;i<sensitiveWordsList.length;i++){ var pattern = new RegExp(sensitiveWordsList[i],"g"); if(i == 0){ outText = Text.replace(pattern,"*"); }else{ outText = outText.replace(pattern,"*"); } }; // confirm弹框 if(outText!=Text){ var r=confirm("你的留言中含有不恰当的词语,系统已自动为你修改,是否继续提交?"); if(r==true){ return outText; }else{ return ""; } }else{ return outText; } }; // 按钮点击方法 function showText() { var oInput1 = document.getElementById("txt1"); var oInput2 = document.getElementById("txt2"); oInput2.value = filterText(oInput1.value); };
对比两种方法,不难看出第二种方法要更好一点,因为第一种方法中有对字符串拼接的操作,更耗时一些。
如有表述不准确之处,欢迎指正,欢迎补充,感谢阅读。