我在angular项目中使用了一个称为Bad-Words的程序包,并使用此程序包创建了一个自定义管道。该管道在chrome上可以完美运行,但是代码在IE 11中中断。完整的UI变为空白,指出javascript文件中存在语法错误。
在这里,我从.js文件中提取了代码并对其进行了优化,然后将其写入自定义Pipe本身。 现在我不会得到想要的输出
样本输入:"I will Kill you "
所需的o / p:"I will **** you"
感谢您的帮助
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'appProfanityFilter'
})
export class ProfanityFilterPipe implements PipeTransform {
list = ["Kill", "5h1t", "5hit", "a55", ......... "xxx"];
placeHolder: '*';
regex: '/[^a-zA-Z0-9|\$|\@]|\^/g';
replaceRegex: '/\w/g';
transform(value: string) {
if (value === undefined || value === '') {
return '';
}
return this.clean(value);
}
isProfane(string) {
debugger;
const result = this.list
.filter((word) => {
const wordExp = new RegExp(`\\b${word.replace(/(\W)/g, '\\$1')}\\b`, 'gi');
return wordExp.test(string);
})
.length > 0 || false;
return result;
}
replaceWord(string) {
debugger;
const result = string
.replace(this.regex, '')
.replace(this.replaceRegex, this.placeHolder);
return result;
}
clean(string) {
debugger;
const result = string.split(/\b/).map((word) => {
return this.isProfane(word) ? this.replaceWord(word) : word;
}).join('');
return result;
}
}
我将在整个代码中使用此管道。
somedata = "I will kill you"
例如<span> {{somedata | appProfanityFilter}} </span>
预期的O / p:I will **** you
我正在使用this 软件包
答案 0 :(得分:1)
我发现正则表达式函数中存在语法问题。
我所做的是通过filter.inner(string)
为此,我添加了一个名为f-ck的程序包,以掩盖句子中的诅咒词(在“列表”数组中声明)。
现在:如果我的输入是:“我会杀了你” 输出将是“我会和你在一起”
此管道可以在代码中的任何位置进一步使用。 例如。 somedata =“我会杀了你”
{{somedata | appProfanityFilter}}