在开发聊天或者留言之类的功能的时候,通常需要过滤敏感词,下面总结了两种方法。

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);
};

对比两种方法,不难看出第二种方法要更好一点,因为第一种方法中有对字符串拼接的操作,更耗时一些。

如有表述不准确之处,欢迎指正,欢迎补充,感谢阅读。