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