0

我有一组受限关键字

在我的评论/消息发布块中不应允许我定义的受限词。

例如:关键字是“facebook”。

facebook, FaceBook, facebook, f*a*c*e*b*o*o*k, facebook, (facebook),'facebook' 这些词不应该允许发布。

任何在 java 脚本中使用正则表达式的想法将不胜感激。

4

4 回答 4

3

我不确定这是一个好主意,但您显示的所有单词都可以使用

var isFacebook = /f\W*a\W*c\W*e\W*b\W*o\W*o\W*k/i.test(str);

请注意,您可以轻松地从单词中生成这样的模式,这使得使用字典进行扩展变得容易:

var r = new RegExp("facebook".split('').join('\\W*'), 'i');
于 2013-04-11T07:57:35.103 回答
0

如果您的意思是要过滤给定的单词,该单词被单词边界包围,并且可能使用特殊字符分隔单词的字母:

var keyword="facebook",
    specialCharClass="[*-]",
    regex;
regex= new RegExp("\\b" + keyword.replace(/(?:)/g,specialCharClass+'?') + "\\b",'g');

"hi(facebo-ok)pie".replace(regex,"__________"); //returns "hi(__________)pie"

但是,总有一些方法可以绕过单词过滤器(例如 faceb00k)。

于 2013-04-11T08:17:11.630 回答
0

试试这个正则表达式:

f[^a-zA-Z0-9]?a[^a-zA-Z0-9]?c[^a-zA-Z0-9]?e[^a-zA-Z0-9]?b[^a-zA-Z0-9]?o[^a-zA-Z0-9]?o[^a-zA-Z0-9]?k

它将匹配以下内容:

facebook
f a c e b o o k
f-a-c-e-b-o-o-k
f*a*c*e*b*o*o*k

但不会匹配以下内容:

facesbooks
ffaceebbookss

您可以使用类似于提供的正则表达式来检测此类单词。

于 2013-04-11T08:05:39.457 回答
0

如果您的目标是阻止而不是剥离,我会将其实施为两步过程。

  1. 去掉所有非文本,将 1337 翻译成普通文本(比如 leet)等
  2. 检查违禁词,如果有问题则阻止

这样,您就可以将您对阻止某个单词列表的担忧分开,并确保您正在检查实际文本。

于 2013-04-11T08:18:01.530 回答