自定义十进制的正则表达式

时间:2012-05-07 10:24:47

标签: java regex

我对自定义十进制=> 的定义数字可以表示为(p,s),其中p是精度,s是比例,然后根据精度和比例描述所有内容。如果需要存储小数部分中包含八位以上的小数,请使用“自定义十进制”。最大比例为29,最大精度为30.数字的非小数部分最多可包含29位数。

P和S可能会有所不同......

假设P = 18 S = 12,即/(P,S)=(18,12)

intLength = 12

fractionalLength = 18

一段代码

String regExprCD = "^-?\\d{1,"+intLength+"}(?>\\.\\d{0,"+fractionalLength+"})?$";

                    info("regExprCD = "+regExprCD );
                    if (value.matches(regExprCD ) || value.isEmpty()){
                        Window.alert("Valid CUSTOM_DECIMAL value");
                    }else{
                        Window.alert("Valid CUSTOM_DECIMAL value");
                    }

我尝试使用正则表达式,但错误出现在页面“正则表达式中的语法错误”

^-?\\d{1,"+intLength+"}(?>\\.\\d{0,"+fractionalLength+"})?$

这是完美的正则表达式,允许以下情况:

正则表达式应接受以下自定义十进制:

123456789012345678

1234567.1234567890

1.123456789012

1234567890.1234567

12345678901234567

12345

正则表达式不应接受以下自定义十进制:

12345678901234567890:原因P> 18 :: P不应大于18

1234567.1234567890123:原因s> 12::: S不应大于12

.1或.1232 ::无效

我使用 ^-?\\d{1,"+intLength+"}(?>\\.\\d{0,"+fractionalLength+"})?$ 这个正则表达式。

这个正则表达式在Sample java程序中运行良好。不适用于GWT

网页上的投掷错误(在GWT中开发)::“正则表达式中的语法错误”

intLength和fractionalLength的数据类型应该是什么? int还是字符串?

哪个是完美的正则表达式?

对此事项的任何帮助或指导将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用以下表达式:^-?\d{0,x}(?>\.\d{0,y})?$,它应匹配以可选减号开头的任何数字,然后是最多x个数字,后跟一个点和最多y个数字。

xy将是您的intLengthfractionalLength

如果要使整数或小数部分成为一个要求(使.11.不匹配),只需将数字间隔中的零替换为1,即{{ 1}}。

更新

这是一个固定长度的SSCCE:

^-?\d{1,x}(?>\.\d{1,y})?$

答案 1 :(得分:0)

尝试:^ [\ d] {1,3} [。] {1} [\ d] {1,1} | ^ [\ d] {1,3}

public class RegexTestStrings {
    public static void main(String[] args) {
        String[] EXAMPLE_TEST = {"123", "0", "123.4", ".1", "123.", "12a", "a12"};
        int P= 4, S=1;
        for(int i = 0; i< EXAMPLE_TEST.length; i++){
            System.out.println(EXAMPLE_TEST[i]+" -- "+EXAMPLE_TEST[i].matches("^[\\d]{1,"+(P-S)+"}[.]{1}[\\d]{1,"+(S)+"}|^[\\d]{1,"+(P-1)+"}"));    
        }
    }
}

结果:

123 -- true
0 -- true
123.4 -- true
.1 -- false
123. -- false
12a -- false
a12 -- false