求一个正则表达式, 大于0 的非负数或非负小数,小数点后保留4位 急

解决方案 »

  1.   

    楼主意思表达不明。
    大于0 的非负数,就包含非负正数和非负小数。
    看这个能否满足
    ^((([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){4})?)|\\d$
      

  2.   

    String regex = "([0][.](([0-9]{3}[1-9])|([0-9]{2}[1-9][0-9])|([0-9][1-9][0-9]{2})|([1-9][0-9]{3})))|([0-9]*[1-9][0-9]*([.][0-9]{4})?)";
    String[] data = {"0", "0000", "0.0000", "0.1000", "0.0100", "0.0010", "0.0001",
                         "0.05", "1.0000", "10.0000", "10.0100", "10.25", "100", "123456"};
    for (String s : data) {
        System.out.printf("%s:%b\n", s, s.matches(regex));
    }
      

  3.   

    怎么不对的?给我个例子check一下,也许我考虑不周
    ^\\d+(\\.\\d{1,4})?$ 是任意数字开头,然后小数部分.和4位数字可有可无结尾,这样就没法保证大于0
    除非你用正则判断后转成数字和0比较[0][.]([0-9]{3}[1-9])表示0.开始,然后小数部分是0-9任意3个数字和是1-9任意1个数字,目的是保证不小数部分不为0
    所以
    [0][.](([0-9]{3}[1-9])|([0-9]{2}[1-9][0-9]))是 |表示或者,然后是[0-9]任意2个数字和[1-9]任意1个数字和是[0-9]任意1个数字作为小数部分,依次类推,就是保证4位小数中有1数个是不为0
    这是对0.xxxx开头的判断最后是
    [0-9]*[1-9][0-9]*([.][0-9]{4})?表示[0-9]任意个数字和[1-9]和[0-9]任意个数字作为整数部分,然后是小数部分.和4位数字可有可无,这样可以保证整数至少有1个数字不为0,即保证整数部分大于0,小数部分可有可无,全为0也没关系
      

  4.   

    看楼主的意思看了半天。主要是觉得你太啰嗦了,不如直接说要一个大于0的有效数字,如果是小数,小数最多有4位。
    你想要的是这个吧:(([1-9][\d]*)(\.[\d]{1,4})?)|(0\.[\d]{1,4})
      

  5.   

    我的理解是非负数,如果是有小数部分,必须是4位小数
    修改简单一些
    String regex = "(0*[.]((?!0000)\\d){4})|([0-9]*[1-9][0-9]*([.][0-9]{4})?)";
    String[] data = {"0", "0000", "00.0000", "0.1000", "0.0100", "0.0010", "0.0001",
                     "0.05", "1.0000", "10.0000", "10.0100", "10.25", "100", "123456"};
    for (String s : data) {
        System.out.printf("%s:%b\n", s, s.matches(regex));
    }
      

  6.   

    理解LZ的意思了,非负数,有小数的话,最多为4位小数
    String regex = "(0*[.]((?!0)\\d|(?!00)\\d{2}|(?!000)\\d{3}|(?!0000)\\d{4}))|(\\d*[1-9]\\d*([.]\\d{1,4})?)";
    String[] data = {"0", "0000", "00.0000", "0.1000", "0.0100", "0.0010", "0.0001",
                     "0.05", "1.0000", "10.0000", "10.0100", "10.25", "100", "123456"};
    for (String s : data) {
        System.out.printf("%s:%b\n", s, s.matches(regex));
    }
      

  7.   

    atomhdp
            正解    谢谢大虾们  给分 给分 
      

  8.   

    atomhdp
     小数位数不止四位啊
      

  9.   

    @atomhdp  这个正则校验不了小数是否大于0的 我可输入:0.00