2013-08-06 65 views
-1

我正在用java正則表達式掙扎。 我想驗證一個數大於零,它不應該是負面的也只有正數的Java正則表達式不包括零

0.00011 - GOOD 
1.222 - GOOD 
0.000 - BAD 
-1.1222 - BAD 

所以任何高於零是好的。 這是可能的Java正則表達式?

+3

任何理由使用正則表達式這樣做呢? –

+4

我懷疑你正在爲此「掙扎」。你能展示你已有的東西嗎? – Kobi

+1

@Kobi我的問題與我的其他帖子有關http://stackoverflow.com/questions/18071219/jsf-greater-than-zero-validator由於沒有人回答,所以我認爲正則表達式會幫助我。但基於下面的答案,我認爲我留下了使用自定義驗證器。再次感謝您的時間,雖然 –

回答

2

不要用正則表達式來做這件事。這樣做與BigDecimal

// True if and only if number is strictly positive 
new BigDecimal(inputString).signum() == 1 
2

爲什麼是正則表達式?

你可以簡單地這樣做以下

double num=0.00011; 
    if(num>0){ 
     System.out.println("GOOD"); 
    }else{ 
     System.out.println("BAD"); 
    } 

或者,如果您對打要做到這一點硬的方式,你可以嘗試一些事情如下太

String num="-0.0001"; 
    char sign=num.split("\\.")[0].charAt(0); 
    if(sign=='-' || Double.parseDouble(num)==0.0){ 
     System.out.println("BAD"); 
    }else { 
     System.out.println("GOOD"); 
    } 
1

最好不要解決它使用正則表達式,仍然是解決方案之一如何使用正則表達式解決它:

public static void main (String[] args) throws java.lang.Exception 
    { 
    String str = "0.0000"; 

    Pattern p = Pattern.compile("(^-[0-9]+.+[0-9]*)|(^[0]+.+[0]+$)"); 
    Matcher m = p.matcher(str); 
    if (m.find()) { 
     System.out.println("False"); 
    }else{ 
     System.out.println("True"); 
    } 
    } 

這裏是demo

1

嘗試

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

將匹配

0.1 
0.01 
0.010 
0.10 
1.0 
1.1 
1.01 
1.010 
3 

但不

0 
0.0 
-0.0 
-1 
-0.1