我对自定义十进制=> 的定义数字可以表示为(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还是字符串?
哪个是完美的正则表达式?
对此事项的任何帮助或指导将不胜感激。
答案 0 :(得分:2)
您可以尝试使用以下表达式:^-?\d{0,x}(?>\.\d{0,y})?$
,它应匹配以可选减号开头的任何数字,然后是最多x
个数字,后跟一个点和最多y
个数字。
x
和y
将是您的intLength
和fractionalLength
。
如果要使整数或小数部分成为一个要求(使.1
或1.
不匹配),只需将数字间隔中的零替换为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