2015-04-06 72 views
-1

我有以下代碼:驗證以便與過濾

String sPassword = pssfldLoginPsw.getText(); 
boolean match = sPassword.matches("[a-zA-Z+]+[0-9+]+[&@!#+]+"); 

if (match==false) 
{        
    System.out.println("Didn't Work");      
} 

if (match==true) 
{ 
    System.out.println("Work"); 
} 

如果我輸入[email protected]G2!這個偉大工程。但是,如果我輸入類似!G2[email protected]它設置match=false。由於這個字段需要包含一個字母,數字和一個非數字字符,但它應該能夠以任何順序擁有它們。我將如何做到這一點?

+1

我建議不要用一個正則表達式做匹配任何。而是嘗試其中的3個。 –

+0

你想允許什麼樣的可能值?我應該能夠給你一個準確的正則表達式,但我需要知道你想要允許什麼。例如,您當前的正則表達式只允許在密碼末尾使用通配符。所以在中間拒絕帶有通配符的密碼是正確的。 – Ractoc

+0

我希望它能驗證,只要它有一個字母(大寫或小寫),一個數字和一個非字母數字字符(或者我認爲你稱之爲通配符),它將被接受的密碼的任何地方,否則我不希望它被接受。 @Ractoc – Dan

回答

0

所以我做了一些進一步的研究,發現"((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"會做我所需要的。

String sPassword = pssfldLoginPsw.getText(); 
boolean match = sPassword.matches("((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"); 

if (match==false) 
{        
    System.out.println("Didn't Work");      
} 

if (match==true) 
{ 
    System.out.println("Work"); 
} 

(?=.*\d)必須包含一個數字從0-9

(?=.*[a-z])必須包含一個小寫字符

(?=.*[A-Z])必須包含一個大寫字符

(?=.*[@#$%])必須包含列表中的一個特殊符號「 @#$%「

.與以前的狀態檢查

{6,20}長度至少是6個字符,最多的20