Javascript 脏话匹配而不是替换

标签 javascript profanity

我正在构建一个非常基本的脏话过滤器,我只想将其应用于服务器端上我的应用程序(fullName、userDescription)的某些字段

有人有在生产中使用脏话过滤器的经验吗?我只希望它:

'ass hello' <- match
'asster' <- NOT match

下面是我当前的代码,但由于某种原因,它连续返回 true 和 false。

var badWords = [ 'ass', 'whore', 'slut' ]
  , check = new Regexp(badWords.join('|'), 'gi');

function filterString(string) {
  return check.test(string);
}

filterString('ass'); // Returns true / false in succession.

如何修复这个“连续”错误?

最佳答案

test method设置lastIndex property正则表达式到当前匹配位置,以便进一步的调用将匹配进一步的出现(如果有)。

check.lastIndex // 0 (init)
filterString('ass'); // true
check.lastIndex // 3
filterString('ass'); // false
check.lastIndex // now 0 again

因此,如果您不每次都重新创建 RegExp,则需要在 filterString 函数中手动重置它:

function filterString(string) {
    check.lastIndex = 0;
    return check.test(string);
}

顺便说一句,要仅匹配完整单词(例如“ass”,但不匹配“asster”),您应该将匹配项包裹在单词边界中,如 WTK 建议的那样,即

var check = new Regexp("\\b(?:"+badWords.join('|')+")\\b", 'gi');

关于Javascript 脏话匹配而不是替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799173/

相关文章:

javascript - 类型 '() => Promise<AxiosResponse<any>>'不能用作索引类型[ReactJs]

profanity - 如何过滤掉 base36 ID 中的脏话?

javascript - unescape 在脏话过滤器中不起作用

php - 未检测到正则表达式preg_quote符号

language-agnostic - 如何防止用户输入脏话?

从 Array 和另一个类扩展的 Javascript 类

javascript - 样式化组件 TypeScript

javascript - 阻止容器重叠

javascript - 数据绑定(bind)在 AngularJS 中不起作用

iphone - 用于 iPhone 的 Objective C 中的基本脏话过滤器