2013-01-31 39 views
0

我這裏有一個腳本:正則表達式不檢測字符串內的發誓詞?

http://jsfiddle.net/d2rcx/

它BADWORDS的陣列,以輸入的字符串與比較。

如果輸入的字符串與發誓字詞字符串完全匹配,但該字符串不會在字符串中包含更多字符時收到任何變體,例如發誓詞之前的空格。

使用本網站作爲參考:http://www.zytrax.com/tech/web/regex.htm

它下面說正則表達式將字符串中檢測到的字符串。

var regex = new RegExp("/" + badWords[i] + "/g"); 
     if (fieldValue.match(regex) == true) 
      return true;  

但是,似乎並非如此。

我需要更改爲正則表達式才能正常工作。

感謝

而且任何聯繫好解釋的正則表達式比谷歌輪番上漲,將不勝感激。

+4

這種搜索會導致誤報(很多人對[斯坎索普](http://en.wikipedia.org/wiki/Scunthorpe)的煩惱等)。 – Richard

+0

謝謝理查德,我讀到了斯肯索普的問題。不過,我更擔心我的代碼無法拾取「屁股」,因爲空白。 – kaleeway

+3

如果您只是想知道* if *正則表達式匹配,請使用String.test()而不是string.match()。這裏是一個鏈接:[JavaScript正則表達式指南](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions) –

回答

2

而不是使用正則表達式來做到這一點,你可能最好只是通過BADWORDS數組循環,尋找使用[的indexOf]將字符串中的實例。(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf

否則,你可能會做出這樣一個正則表達式。 ..

\badword1|badword2|badword3\ 

只需檢查任何匹配。

在正則表達式字邊界是\b所以你可以說

\\b(badword1|badword2|badword3)\b\ 

將只匹配整個單詞 - 即斯肯索普都會好的:)

var rx = new RegExp("\\b(donkey|twerp|idiot)\\b","i"); // i = case insenstive option 

alert(rx.test('you are a twerp')); //true 

alert(rx.test('hello idiotstick')); //fasle -not whole word 

alert(rx.test('nice "donkey"')); //true 

http://jsfiddle.net/F8svC/

+0

但是空間等等,這將工作在例如「屁股」 – kaleeway

+0

我不明白對正則表達式的建議。這絕對是一個正則表達任務! – 2013-01-31 14:08:46

2

請檢查http://www.w3schools.com/jsref/jsref_match.asp並注意fieldValue.match()不會返回一個布爾值,而是一組匹配數

+2

如果您使用的是OP的類型強制性條件,那並不重要。如果數組包含任何內容,則double equals('==')將返回一個真值,但如果它爲空則返回falsey值。並不是說我會推薦這種方法,但這並不能真正回答OP關於RegExp的問題;它只是選擇編碼風格,可以在代碼運行的時候提供。 – guypursey

+0

「some」.match(new RegExp(/ some /))=> [「some」]; 「some」.match(new RegExp(/ some /))== true => false; –

+0

剛剛測試過這一點,你對雙等於。正如我所說,我不會推薦這種方法,尤其是現在你已經指出它不起作用,但可以簡單地通過將相關代碼行更改爲if(fieldValue.match(regex)), ;如果它是'null',那麼就'if'語句而言,結果是錯誤的。 JSFiddle [這裏](http://jsfiddle.net/guypursey/yMCy4/1/)。問題的關鍵在於你的回答並沒有真正解決OP的問題,而是指出了一個關於'match'方法的頁面,這裏不太重要。 – guypursey

2

改變這一點,這需要一個循環:

var regex = new RegExp("/" + badWords[i] + "/g"); 

此:

var regex = new RegExp("/" + badWords.join("|") + "/g"); 

將是一個開端。這將一次完成所有匹配,因爲數組變成一個字符串,每個元素由管道分隔。

P.S. RegEx here的參考指南。但在網上沒有很多關於某些功能是什麼和不可能的明確信息,也沒有什麼是好的代碼。我發現了幾本最有用的書籍:David Flanagan最新的JavaScript:權威指南和Douglas Crockford的JavaScript:The Good Parts爲最可用的JavaScript子集,包括RegEx。 Crockford的鐵路圖特別好,但我不確定他們是否可以在任何地方在線。

編輯:Here's一個相關章節的在線副本,包括我提到的一些鐵路圖,以防萬一它有幫助。

+0

不要忘記逃避壞詞。 – JDB

相關問題