2014-01-16 59 views
2

我試圖寫一個REGEX來接受1-100之間的數字。如果它接受從1到無窮大的所有事情,那將是非常棒的,但這可能很複雜 - 或者說不可能。對於數字1到100的Java REGEX

public static boolean isNumeric(String str) { 
return str.matches("-?\\d+(\\.\\d+)?"); 
}//end boolean. 
+1

爲什麼你想使用正則表達式來完成這個任務?只需將'str'轉換爲'int',然後檢查範圍。這會容易得多。 –

+0

@RohitJain如下所述,這可能會導致拋出異常。 – marisbest2

回答

3

這將是巨大的,如果它接受了從1到無窮大,但是這可能是複雜的 - 或不可能的。

"[1-9]\\d*"怎麼樣?

這將接受一個非零數字後接任意數字序列。換句話說,任何正整數。

+0

快速思考,因爲輸入是一個字符串,它可能包含一個0開始的字符串,如「007」,也許更好的答案是: '0 * [1-9] \\ d *' – Jorge

3
public static boolean isNumeric(String str) throws NumberFormatException { 
    int i = Integer.parseInt(str); 
    return i > 0 && i < 100; //Arbitrary numbers within range of int 
} 

不使用正則表達式,但這應該完成同樣的事情。將字符串轉換爲一個整數,然後檢查它是否在你想要的範圍內。

+1

這會如果字符串包含非數字字符,則會引發異常。 – Dodd10x

+2

解析兩次是沒有必要的,並且用'NumberFormatException'將它包裝在try catch中,並且如果OP想要有無窮大整數可能會溢出。 –

+0

這兩個意見都是真實的,這只是一個快速而骯髒的例子,讓他指出一個可能有所幫助的方向。我將編輯以儘快解決這些問題。 – csmckelvey

1

如果你想真的徹底,你可以使用"-?(0|([1-9][0-9]*))\.?[0-9]*"這應該會給你所有的數字從-infinity到+ inifinity。擺脫-?會給你所有的積極的數字。 "0|(-?[1-9][0-9]*)"應該給你從-infinity到+ infinity的所有整數。 "[1-9][0-9]*"會給你所有大於0的整數。