2012-10-23 64 views
0

我有一些jQuery驗證代碼,必須通過一些Selenium測試。但是,每次運行測試時,不同的測試都會失敗,並且不同的測試通過。例如,在一次測試中,縮短密碼將失敗並且密碼過長。但是,如果我重新運行測試,則可能會發生相反的情況!jQuery /正則表達式失敗硒IDE測試

這是正則表達式:

var password = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*(_|[[email protected]#$%^&*.,?])).{6,20}$/; 

這是jQuery的:

if($('#password').val() ==""){ 
$('#passwordErrorMsg').text("Your password must be between 6 and 20 characters. It must contain a mixture of upper and lower case letters, and at least one number or symbol."); 
}   
else if(password.test($('#password').val())){  
$('#passwordErrorMsg').text("OK"); 
}  
else($('#passwordErrorMsg').text("Your password must be between 6 and 20 characters. It must contain a mixture of upper and lower case letters, and at least one number or symbol.")); 
}); 

在經過Selenium測試將是有益的和感激,感謝任何幫助。

+0

@roasted,我認爲正則表達式是正常的......它只是用向前檢查每個必要的符號,然後測試字符串長度。 @ user1766599。你可以從你的第四個前瞻中刪除'_ |'。它應該由角色類來照顧。 (雖然這不會解決你的問題)。此外,你最lasst的錯誤信息不適合正則表達式。你的正則表達式需要一個數字**和**符號。 –

+0

好的,我沒看過「它必須包含大寫和小寫字母的混合體,並且至少包含一個數字或符號。」 ... –

回答

0
/^((?<lowerCase>[a-z])|(?<upperCase>[A-Z])|(?<numberOrSymbol>[[email protected]#$%^&*.,?-])){6,20}(?(lowerCase)|(?!))(?(upperCase)|(?!))(?(numberOrSymbol)|(?!))$/ 

從行首開始。

以小寫字母或大寫字母或NumberOrSymbol取6-20次,同時計算每種類型的出現次數。

驗證每種類型至少發生過一次。

驗證我們是否在行的末尾。

關於問題中提供的正則表達式的注意事項:它驗證是否存在所需的符號,但並不要求pwd中的所有字符屬於其中一個「陳述」類,它會接受字符串「 aA3 @ \\「,這可能不是作者想要的可接受的密碼。