2011-05-29 28 views
1

希望得到一個快速的問題。我試圖驗證一個雙。確保小數點後一位是正數。使用正則表達式在Java中匹配一位小數位

良好的價值觀:0.1,2.5,100.1,1,54個
錯誤值:-0.1,1.123,1.12,ABC,00012.1

所以我在這裏試過正則表達式:

public boolean isValidAge(String doubleNumber) 
{ 
    DoubleValidator doubleValidator = new DoubleValidator(); 
    return doubleValidator.isValid(doubleNumber,"*[0-9]\\\\.[0-9]"); 
} 

我也試過:"*[0-9].[0-9]""\\\\d+(\\\\.\\\\d{1})?","[0-9]+(\\\\.[0-9]?)?"

沒有什麼似乎工作。我一直在使用org.apache.commons.validator.routines.DoubleValidator

有沒有另一種方法可以做到這一點爲什麼這些正則表達式的不工作?我不必使用正則表達式。

由於

+1

沒有小數位的數字怎麼樣,比如'1'或'54'? – Jonah 2011-05-29 16:39:19

+0

如果這個數字有幾個前導零,比如00012.3,該怎麼辦? – Rogach 2011-05-29 16:55:11

+0

對不起,我沒有覆蓋,也應該可以有1或54,沒有前面的0。 – Sara 2011-05-29 17:06:53

回答

7

這將匹配數和僅一個號碼與任一個多位數沒有前導零(一個或多個),或者只是一個零,和任選的小數與一個小數點預小數點數數字。包括字符串的開始/結束的比賽,所以它不會匹配在一個較大的字符串一個數字(更新不接受前導零,信貸@Nicklas一個):

^([1-9]\d*|0)(\.\d)?$ 

使用java.util.regex.Pattern庫,而不是。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

因爲你把正則表達式轉換成字符串時,一定要逃離反斜槓

"^([1-9]\\d*|0)(\\.\\d)?$" 

我建議您在正則表達式讀到這裏,他們是一個重要的工具可以說「在你的腰帶下」。

http://www.regular-expressions.info/

+1

如果不可能有引導零:'^([1-9] \\ d * | 0)(\\。\\ d)?$'' – 2011-05-29 17:59:17

+0

@Nicklas:這將拒絕0.3 – amit 2011-05-29 18:18:47

+0

@amit:不,它沒有。 – Jonah 2011-05-29 19:02:16

3
Pattern.compile ("[0-9]+\\.[0-9])").matcher (doubleNumber).matches() 

會做的伎倆。
如果您還想允許沒有小數點:

Pattern.compile ("[0-9]+(\\.[0-9])?").matcher (doubleNumber).matches() 

編輯:下你對沒有前導零評論和整數OK:

Pattern.compile("([1-9][0-9]*|[0-9])(\\.[0-9])?").matcher(doubleNumber).matches() 
-1

,如果你需要驗證十進制與點,逗號,正數和負數:

Object testObject = "-1.5"; 
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+([\\.\\,]{1}[0-9]{1}){0,1}$", (CharSequence) testObject); 

祝你好運。

+0

如果不會告訴我,米錯了。 – august0490 2015-03-09 04:20:52