我正在创建一个过滤诅咒字词的管道,需要帮助

时间:2019-06-14 14:34:38

标签: angular pipe

我在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 软件包

1 个答案:

答案 0 :(得分:1)

我发现正则表达式函数中存在语法问题。 我所做的是通过filter.inner(string)

删除了方法replaceWord(string)内的代码

为此,我添加了一个名为f-ck的程序包,以掩盖句子中的诅咒词(在“列表”数组中声明)。

现在:如果我的输入是:“我会杀了你” 输出将是“我会和你在一起”

此管道可以在代码中的任何位置进一步使用。 例如。 somedata =“我会杀了你”

{{somedata | appProfanityFilter}}