2

我对自定义小数的定义 =>数字可以表示为 (p,s),其中 p 是精度,s 是比例,然后描述关于精度和比例的所有内容。如果您需要在小数部分存储超过八位的小数,请使用自定义小数。最大小数位数为 29,最大精度为 30。数字的非小数部分最大为 29 位。

P 和 S 可能不同...

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

整数长度 = 12

小数长度=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+"})?$ 了这个正则表达式。

这个正则表达式在示例 java 程序中工作正常。不在 GWT 中工作

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

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

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

在此问题上的任何帮助或指导将不胜感激。

4

2 回答 2

2

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

xy将是你的intLengthfractionalLength

如果您想让整数或小数部分成为要求(这样.11.不匹配),只需将数字区间中的零替换为 1,即^-?\d{1,x}(?>\.\d{1,y})?$.

更新

这是一个固定长度的 SSCCE:

String expression = "^-?\\d{1,18}(?>\\.\\d{0,12})?$";

//prints true
System.out.println("12345678".matches(expression)); 

//prints true
System.out.println("1234.5678".matches(expression)); 

//prints false -> integer part too long
System.out.println("1234567890123456789.5678".matches(expression)); 

//prints false -> fraction part too long
System.out.println("1234.1234567890123".matches(expression)); 

//prints false -> integer part missing
System.out.println(".5678".matches(expression)); 
于 2012-05-07T10:49:28.380 回答
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——真的
0 -- 真
123.4 -- 真
.1 -- 错误
123. -- 错误
12a -- 错误
a12 -- 错误
于 2014-06-20T07:06:30.840 回答