3

验证必须用点或逗号表示价格值且最多两个十进制值的字符串的最佳方法和解决方案是什么?

RegExpjava.text.DecimalFormat还是别的什么?

这些值被接受:

1
11

1,05
2,5

1.05
2.5

我看到了这些解决方案,但这些并不是我想要的:

java十进制字符串格式

在 jtextfield 中验证“价格”

我也尝试了这个 RegExp /^(\\d+(?:[\\.\\,]\\d{2})?)$/,但它不起作用。

4

2 回答 2

17

使用这个正则表达式:

final String regExp = "[0-9]+([,.][0-9]{1,2})?";

它匹配 1 个或多个数字,后跟可选:逗号或句号,后跟 1 或 2 位数字。

在 Java 中,您可以使用:

  • String.matches(String regex)简单地验证一个String. 例如:"1.05".matches(regExp)返回true

  • PatternMatcher,使用正则表达式的频率越高,速度就越快。例子:

    final Pattern pattern = Pattern.compile(regExp);
    
    // This can be repeated in a loop with different inputs:
    Matcher matcher = pattern.matcher(input); 
    matcher.matches();
    

测试。

于 2013-07-23T09:12:10.620 回答
0

你可以尝试这样的事情

 String str="1,05";
    String[] dotSub=str.split("\\.|,");
    if(dotSub.length==2){
         if(dotSub[1].length()<=2){
             System.out.println("valid price");
         }
         else{
             System.out.println("not a valid price");
         }
    }
    else{
        System.out.println("not a valid price");
    }
}
于 2013-07-23T09:24:14.607 回答