Js利用正则实现敏感词过滤


[JS代码]
    var msg = "CNM,SB,NMSL,MB,FUCK,hhhhh";
    console.log(filterWords(msg, "*")); //结果为*,*,*,*,*,hhhhh
    console.log(filterWords(msg, "#", { isEqual: true })); //结果为###,##,####,##,####,hhhhh

    //msg:所传入需要过滤的字符串  replacedStr:指定的替换符号  options:是否等数量替换
    function filterWords(msg, replacedStr, options) {
      //定义一个对象用于存放初始的值
      var defaultOptions = {
        isEqual: false,
        keyWordList: ["CNM", "SB", "NMSL", "MB", "FUCK"], //敏感词列表
      };

      //判断options对象是否传入了参数,如果传入了就将所传入参数中的属性赋值给函数内自定义的属性(覆盖初始默认值)
      if (options) {
        for (var key in options) {
          defaultOptions[key] = options[key];
        }
      }

      //给初始值对象敏感词列表中添加符号|并用于创建新的正则
      var rules = defaultOptions.keyWordList.join("|");
      var reg = new RegExp(rules, "ig");

      //替换
      msg = msg.replace(reg, function (text) {
        // 接收一个回调函数,根据回调函数的返回值决定替换的内容
        // text => 正则匹配匹配到的敏感词
        console.log(text); //this依次指向reg中的字符串
        return defaultOptions.isEqual
          ? replacedStr.repeat(text.length) //str.repeat(n) => 将str重复n次
          : replacedStr;
        //如果isEqual:true => 用等长度的*号依次替换this所指向的字符串,否则直接全部替换为一个字符串
      });
      return msg;
    }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM