Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用简单的角度过滤器替换输入字符串中出现的所有特定字符串,而不考虑大小写和空格_Javascript_Angularjs_Regex_Angularjs Filter_Ng Filter - Fatal编程技术网

Javascript 使用简单的角度过滤器替换输入字符串中出现的所有特定字符串,而不考虑大小写和空格

Javascript 使用简单的角度过滤器替换输入字符串中出现的所有特定字符串,而不考虑大小写和空格,javascript,angularjs,regex,angularjs-filter,ng-filter,Javascript,Angularjs,Regex,Angularjs Filter,Ng Filter,在我的网站上,我有一个评论栏,人们可以在这里写任何他们想写的东西。为了防止垃圾邮件和不严肃的评论,我以这种方式使用角度过滤器: <span>{{comment | mouthWash}}</span> 脏话。json是这样的: ["fuck", "ass", "shit", etc...] 例如,{{“操这个”|漱口水}}被输出为moohthis 这是完美的工作,除了我希望它忽略空白,使它更防弹。我对regex没有太多的经验,因此如果有人对此有一个简单的解决方案,我将

在我的网站上,我有一个评论栏,人们可以在这里写任何他们想写的东西。为了防止垃圾邮件和不严肃的评论,我以这种方式使用角度过滤器:

<span>{{comment | mouthWash}}</span>
脏话。json是这样的:

["fuck", "ass", "shit", etc...]
例如,
{{“操这个”|漱口水}}
被输出为
moohthis


这是完美的工作,除了我希望它忽略空白,使它更防弹。我对regex没有太多的经验,因此如果有人对此有一个简单的解决方案,我将非常感激。

只要更改
新的RegExp(word,“ig”)
新RegExp(“ig”)

工作示例:

var words = ['pig', 'dog', '', ' ', 'cow'];

words.forEach(function(word) {
     var regEx = new RegExp("ig");
     word = word.replace(regEx, "mooh");
    console.log(word);
});
输出:

    "pmooh"
    "dog"
    ""
    " "
    "cow"

这是我最后得到的代码:

    app.filter('mouthWash', function($http) {

      var badWords;
      $http.get('js/objects/bad-words.json').success(function (data) {
        badWords = data;
      });

      return function(input) {

        angular.forEach(badWords, function(word){
          var str = word.substring(0,1)+"\\s*";
          for (var i = 1; i < word.length - 1; i++) str = str + word.substring(i,i+1)+"\\s*";
          str = str + word.substring(word.length - 1,word.length);
          var regEx = new RegExp(str, "gi");
          input = input.replace(regEx, "mooh");
        });

        return input;
      };

    });
然后从字符串创建一个
regExp
,方法是使用
regExp
构造函数,将字符串作为第一个参数,“gi”作为第二个参数,使
regExp
全局且不区分大小写

var regEx = new RegExp(str, "gi");

然后,正则表达式被用来搜索输入字符串,并用“mooh”替换所有匹配项。

如果我的问题不清楚,我很抱歉,但这并不能解决问题。我不知道你是否有过使用angular的经验,但是过滤器的概念是你可以过滤变量,然后返回一个过滤过的变量版本。在您的示例中,输入不会更改,也不会返回。
for (var i = 1; i < word.length - 1; i++) str = str + word.substring(i,i+1)+"\\s*";
var regEx = new RegExp(str, "gi");