2017-09-28 23 views
-3

我已經看到了很多關於正則表達式的建議,以找到字符串中的空格,但目前爲止沒有任何工作。是的,循環使用下一個循環的字符串的概念將起作用。我真的很想學習如何用正則表達式和模式匹配器來做到這一點!我的問題是什麼,我需要添加到我的正則表達式字符串,所以它會返回FALSE?下面的代碼我已經添加了許多(\\)的化身無濟於事。我不想刪除空格。java正則表達式找到字符串中的所有空格

我測試的代碼建議作爲一個重複,並沒有看到工作中的鏈接評論

String tstr = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[[email protected]$!%*?&])[A-Za-z\\[email protected]$!%*?&]"; 

String astr = etPW.getText().toString().trim(); 
Pattern regex = Pattern.compile(tstr); 
Matcher regexMatcher = regex.matcher(astr); 

boolean foundMatch = regexMatcher.find(); 

if(foundMatch == false){ 
    Toast.makeText(MainActivity.this, "Password must have one Numeric Value\n" 
     + "\nOne Upper & Lower Case Letters\n" 
     + "\nOne Special Character $ @ ! % * ? &", Toast.LENGTH_LONG).show(); 
    //etPW.setText(""); 
    //etCPW.setText(""); 
    // Two lines of code above are optional 
    // Also by design these fields can be set to input type Password in the XML file 
    etPW.requestFocus(); 

    return ; 
} 
+0

什麼是您的密碼要求?爲什麼在字符類中重複兩次'$'?我已經多次看到 - 爲什麼要複製一些正則表達式而不真正理解它在做什麼?看起來你複製了它的一部分。 –

+0

@WiktorStribiżew我從正則表達式測試站點複製了這段代碼,所以我同意我可能完全不瞭解代碼。要求是沒有白色空間,包括一個大寫字母和一個小寫字母和數字是允許的,而老學校的一個特殊字符。我會測試在字符類中刪除兩次$ Dupes已被刪除THANKS –

+0

雙'$'沒有造成任何傷害,這只是不好的風格。您可以嘗試'「(?=。* [az])(?=。* [AZ])(?=。* \\ d)(?=。* [$ @ $!%*?&])\\ S *「'但可以通過'regexMatcher.matches()'使用它。請更新問題以包含實際需求。 –

回答

2

可以使用負前瞻檢查空間建議:

^(?!.*)

^ - 在字符串的開始處開始匹配。

(?! - 開始負先行基(該括號內的圖案不能來下

.* - 任何非換行符任意次後跟一個空格

) - 關閉陰性先行組

與完全正則表達式模式組合(也清理一個位,以除去冗餘):

^(?!.*)(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[[email protected]$%&*?])[A-Za-z\\[email protected]$%&*?]+

+0

我不確定爲什麼,但第一個分組需要用\\ s格式化,如這個例子^(?!。* \\ s)所以在Android Studio中看到這個長時間的對話就是這樣工作的。感謝所有貢獻並提供幫助的人! –

+0

@James_Duh感謝評論我嘗試發佈,它不會工作正則表達式似乎有自己的想法,取決於你正在使用的味道 – Grendel

相關問題