2013-08-06 109 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