javascript正则表达式匹配排除空格和特殊字符

时间:2013-04-11 07:55:18

标签: javascript regex

我有一组限制关键字

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

例如:关键字是“facebook”。

f-a-c-e-b-o-o-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,(脸书),'facebook'这些词语不允许发布。

任何在java脚本中使用正则表达式的想法都会受到赞赏。

4 个答案:

答案 0 :(得分: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');

答案 1 :(得分: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

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

答案 2 :(得分: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)。

答案 3 :(得分:0)

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

  1. 删除所有非文本,将1337翻译为普通文本(例如leet)等
  2. 检查禁用词,并阻止是否出错
  3. 通过这种方式,您分离了阻止某个单词列表的问题,并确保您正在检查实际文本。