2014-10-17 25 views
1

我有一個驗證字符串,並確保它不具有任何空格或大寫字符的方法:Java的正則表達式來找到空格或大寫字符

boolean validate(String input) { 
    if(input.matches(".*\\S.*([A-Z]+)")) { 
     return false; 
    } 

    return true; 
} 

不幸的是,當我運行這個,它根本不起作用。它不會拋出任何異常,它只允許所有輸入字符串(「HelloWorld」,「hello world」,「Hello world」等)通過驗證。任何想法,我要去錯了嗎?

+0

如果你的字符串至少有一個**非空白**字符,然後至少有一個大寫字母,你的正則表達式將匹配。它不會執行你想要的比賽。 – Guss 2014-10-17 15:40:58

+0

您最好使用「負面正則表達式」和「.find()」;即'最終模式wsOrUpper = Pattern.compile(「[A-Z \ s]」)',然後嘗試和'wsOrUpper.matcher(input).find())' – fge 2014-10-17 16:01:58

回答

4

您可以使用.matches("[^A-Z\\s]+")

它將返回true,如果你的字符串不包含任何大寫字符或空格字符。

說明

[...]之間的位稱爲一個字符類,它匹配所有的字符提供

  • ^使它負,因此它匹配未提供
  • A-Z一切都是範圍的大寫字母
  • \\s對於任何白色字符ace字符
  • +確保您的字符串至少爲1個字符或更多。
+0

爲什麼在開始時插入符號?還是太複雜了。 – Guss 2014-10-17 15:42:21

+2

'^'使它成爲否定字符類,所以它意味着[]中沒有任何字符,即沒有大寫字母,而不是空白。 – PeterK 2014-10-17 15:44:07

+0

是的,當然 - 愚蠢的我。這會起作用,儘管我仍然認爲我的答案更簡單。 – Guss 2014-10-17 15:47:21

0

更改您的代碼,

boolean validate(String input) { 
    if(input.matches(".*?[A-Z\\s].*")) { 
     return false; 
    } 

    return true; 
} 

因爲matches函數試圖將整個字符串匹配,你不需要去爲錨。如果輸入字符串包含空格或大寫字母,上面的代碼將返回false。

+1

仍然過於複雜。 – Guss 2014-10-17 15:41:57

+0

現在它不會...... – 2014-10-17 15:46:20

+0

更好,但放下問號。 – Guss 2014-10-17 15:55:17

0

簡單地說,正則表達式匹配空格或大寫字母是:

.*[A-Z\s].* 

如果任何一個這樣的字符將無效的投入,那麼這將很好地工作。

通常情況下,我將放棄在.*的開始和結束,但Java的String#matches()必須匹配整個字符串或者失敗,與動態語言,將匹配任何字符串流行=~操作。

相關問題