2013-04-11 57 views
0

我有一組受限關鍵字javascript正則表達式匹配排除空間和特殊字符

在我的評論/消息發佈塊不應該允許我定義的限制詞。

例如:關鍵字是「臉譜」。 (臉書),'臉書'這些詞不應該允許發佈。這些詞語不應該允許發佈。這些詞語應該是不允許發佈的。這些詞語不應該允許發佈。

任何想法在Java腳本中使用正則表達式將不勝感激。

+2

必讀:[猥褻過濾器:不好的想法,或令人難以置信的交際不良想法?](http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing -bad-idea.html) – 2013-04-11 07:57:47

+2

「f * a * c * e * b * o * o * k」是什麼意思?你是指那些有任何字符的人物?我可以看到這造成很大的困難。 「 」看起來我們將不得不面對書籍傢伙「 - DENIED – 2013-04-11 07:58:02

+0

@Evan Knowles - 是的,我的意思是任何特殊字符 – seravee 2013-04-11 08:01:04

回答

3

我不知道這是一個好主意,但可以使用

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

注意,你可以很容易地從一個Word,這使得它易於擴展這樣的模式被檢測到的所有顯示您的話藉助詞典:

var r = new RegExp("facebook".split('').join('\\W*'), 'i'); 
+1

''[^ \ w]'=='\ W' – georg 2013-04-11 08:10:52

+0

@ thg435你說得對,我總是忘記這個,它更短。謝謝。 – 2013-04-11 08:15:03

+1

+1從未想過通過將字符串分解爲單個字符來創建新的正則表達式模式。 – booyaa 2013-04-11 08:19:30

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 

您可以使用正則表達式類似於提供給檢測這樣的字眼之一。

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爲例)。

0

如果您的目標是阻止,而不是剝離,我將這個過程分爲兩步。

  1. 去掉所有的非文本,翻譯1337年到正常的文本(說萊特)等
  2. 檢查被禁止的話,塊如有出錯

這樣,你分隔您的問題阻止某些單詞列表,並確保您正在檢查實際文字。