2013-08-30 25 views
-2

我希望能夠檢查是否在字符串中重複兩次以上。例如:jQuery確定一個字是否在一個字符串中連續重複

$string = "Hello hello hello." 

有沒有辦法在jQuery中做到這一點?只是要清楚,我不要想檢查一個特定的單詞或字符已被重複,我想檢查是否任何單詞已被重複兩次以上。我希望這可以幫助防止用戶嘗試垃圾我的論壇。我在想,正則表達式可能是答案,但我不知道我正在做什麼,當談到正則表達式。

+3

垃圾郵件發送者可以只禁用javascript,如果你有一個客戶端解決方案去。添加驗證碼或其他東西不是更好嗎? – phil

+0

他使用'$ string'語法表明他可能會在服務器上執行它,因爲它看起來像PHP。 – Barmar

+1

我會小心這種做法,因爲可以想象在句子中多次重複「to」或「that」等單詞,您可能會拋出一些合法的東西。我不清楚你想要測試的文字。 – ajb

回答

1

這個規則表達式應該這樣做:

/\b(\w+)\b(?:.*\b\1\b){2}/i 

\b單詞邊界匹配。 \w匹配單詞組成字符。將\w+置於括號內使其成爲捕獲組,在這種情況下組#1。 \1匹配之前捕獲的任何內容。 {2}第二組意味着兩次匹配該部分後,所以這會查找至少3次重複;用你想要的任何最小值代替2

i修飾符使其不區分大小寫,所以Hellohello將相互匹配。

您可能希望使其僅匹配特定長度的單詞,例如4個或更多字母。然後將\w+更改爲\w{4,}。否則,重複諸如athe之類的小詞語的句子將跳過該過濾器。

您可能還需要重複之間的距離應該很短,否則重複段落中相距甚遠的詞可能會使其跳動。將.*更改爲.{,10},要求重複單詞至多爲前一個單詞的10個字符。

+0

如果他想要「超過兩次」,另一個'\ 1'應該這樣做:'/ \ b(\ w +)\ b。* \ b \ 1 \ b。* \ b \ 1 \ b/i' – ajb

+0

@ ajb好點。我更新了它,使用'{n}'來顯示如何指定任意最小重複次數。 – Barmar

+0

我認爲所需的匹配是三個_連續詞?如果是這樣,只要將'。*'改爲'\ s +',這個就可以了。 – ridgerunner

0

我不確定它確實是你需要的,但是如果你想確定哪些單詞重複了一個簡單的可能是用空格分割字符串。

$(document).ready(function() { 
    var list=$("#wordList").val().split(' '); 
    alert ("initial list of words :" + list); 
    var listDuplicateWords = list.filter(function(item,i,allItems){ 
    return i!=allItems.indexOf(item); 
    }); 
    alert ("duplicate words:" + listDuplicateWords); 
}); 

看到的jsfiddle http://jsfiddle.net/corinnekm/Udg3P/3/

相關問題