2013-05-18 69 views
0

我得做一個腳本來檢查輸入框(密碼)爲相同的字符發生兩次。這應該與正則表達式驗證一起使用(這已經完全正常)。
爲了成功,我知道我需要用某個(for?)循環來檢查一個字符是否出現兩次。現在這是一個奇怪的要求。我知道。但我並不完全確定這個功能的條件。如果任何人有任何關於如何做這件事的建議,那會很棒。例如:「ABad12」 - 將通過,而「AbAc12」將返回錯誤。提前致謝。Javascript,檢查相同的字符

function checkForm(form) 


{ 

var re = /^\w{6,10}$/; 

    if(!re.test(form.pwd1.value)) { 
    alert("Error: Password has to be in-between 6-10 characters!"); 
    form.inputfield.focus(); 
    return false; 
    } 


} 

上面去的想什麼腳本我把它與(其中有更多的正則表達式驗證)相結合的例子。

回答

1

這是我會怎麼做:

var str = "ABad12", 
    valid = str.split("").filter(function(e, i, a) { 
     return a.indexOf(e) !== i; 
    }).length === 0; 

if (!valid) { 
    // ... 
} 

但是請注意,陣列filter()方法是不是在舊的瀏覽器可用,所以提前檢查browser compatibility page

+0

對不起,遲遲不得不想一想。但是,如果使用這個代碼,它可以加載一個函數,如果有效的話,對吧?如果我希望這與我的當前正則表達式一起使用,可以處理大寫字母,小寫字母和數字字符。我可以觸發這個函數,當所有的條件「已經驗證?我想這需要一點改寫,以處理我當前的代碼。我仍然是一個初學者,所以很難看到我的最終結果。 – Holmberg

+0

@ Holmberg將代碼包含在問題主體中總是很好,這樣我們就可以給你更精確的解決方案。 – VisioN

+0

我意識到從你的回答中,我已經完成了,我認爲這已經足夠,但是我可以包括更多,如果有必要 – Holmberg

0

你不需要for循環。 一個簡單的正則表達式是不夠的:

(\w)\1+ 


var validateRegEx=/(\w)\1+/; 
validateRegEx.test("aa") -> return true; 
validateRegEx.test("ab") -> return false; 
+0

這隻適用於一個接一個地出現的字符,這不是唯一的情況。 – VisioN

+0

爲什麼減1?這不適合你? –

0

這是一個簡單(雖然有點蠻力)的代碼,純JavaScript,沒有正則表達式:

function check(s) { 
    var i; 
    for(i = 0; i < s.length - 1; i++) { 
    if(s.indexOf(s.substring(i,i+1), i+1) >= 0) { 
     return false; 
    } 
    } 
    return true; 
} 

它只是處理從一開始就和檢查字符串每個字符是否在字符串後面出現該字符。

如果你將它集成到你的代碼中,你可以發出一個特定的消息。在return false之前,您可以調用錯誤報告功能,要求其顯示例如'Error: character 「' + s.charAt(i) + '」 appears more than once.'

相關問題