2016-04-09 47 views
0

我試圖讓一個Java正則表達式的工作使用ScannerSystem.in功能,試圖驗證用戶輸入。我想驗證的是隻能包含字母作爲輸入的用戶輸入,並且可以包含多個單詞。如果我的例子(「測試1」)中鍵入它會拋出一個信息,警告我必須輸入字母,並提示在重新進入,但是如果我可以鍵入(「測試1」),那麼它會通過我的正則表達式,這似乎是空間導致這個問題,但在我的正則表達式中添加一個空間還沒有解決我的問題。任何幫助將不勝感激。下面是我的代碼是有問題的部分:Java的掃描儀hasNext()字符串的正則表達式驗證

System.out.println("Please enter the your name: "); 

while(!input.hasNext("[a-zA-Z]+")){ 

    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 

} 

String name = input.nextLine(); 

這可能是明顯錯誤的人,但我是新來的Java和正則表達式,並一直在試圖找出一整天一直與去錯了什麼沒有成功。

謝謝您的時間。

+0

嘗試'^ [a-zA-Z_] * $'這並不完美,但它很簡單足以讓新手理解。 – TEK

+0

也許'^ [a-zA-Z_] + $'這樣空字符串是不允許的。 – totoro

回答

1

所有你需要做的就是添加[]的內部空間。我也建議使用^(聲明它必須是字符串的開始)和$(用於字符串的結尾):

^[a-zA-Z ]+$ 

您還可以使用\s選擇所有的空白,像標籤

你全碼:

System.out.println("Please enter the your name: "); 

while(!input.hasNext("^[a-zA-Z ]+$")){ 
    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 
} 

String name = input.nextLine(); 

如果你想允許像*符號,所以一切BU t數字。你可以使用\d+。如果它匹配,然後打印出錯誤(你需要刪除while聲明中的!

+0

我會提出同樣的答案,但它不會工作..我測試相同的代碼以'約翰Doe',它將R輸入迴路,和我想不通爲什麼.. – Maljam

+0

我有同樣的作爲Maljam的問題,我一整天都在嘗試,如果有空間存在,它似乎不能驗證輸入。只有像「Test1」這樣的字符串,而不是「Test 1」,即使在[]中增加了空格。感謝您的建議,雖然Druzion! – ChocolateDogBone

+0

@ChocolateDogBone你用'\ s'嘗試過嗎? – Druzion