【问题标题】:Java validate price with comma or dot and two decimal value [closed]Java用逗号或点和两个十进制值验证价格[关闭]
【发布时间】:2013-07-22 05:02:12
【问题描述】:

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

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

这些值被接受:

1
11

1,05
2,5

1.05
2.5

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

java decimal String format

valdating a 'price' in a jtextfield

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

【问题讨论】:

  • 我的建议是使用正则表达式,尤其是您期望的特定格式
  • 正则表达式可以帮到你。
  • ^[0-9]+(\.[0-9]+)?$ 必须使用它(添加逗号的条件
  • 你已经接近了,你不需要转义字符类中的字符,除了中间的连字符。试试/^\\d+(?:[.,]\\d{2})?$/

标签: java regex


【解决方案1】:

使用这个正则表达式:

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

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

在 Java 中你可以使用:

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

  • PatternMatcher,这将是 faster more 通常你使用你的正则表达式。示例:

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

Test.

【讨论】:

  • 整个正则表达式没有意义。
  • 这是我认为的完美方式,感谢您的信息,有时我也迷失了验证。
  • 让我澄清一下,OP 要求将 decimal 数字限制为 2,而这个数字匹配无限小数位。此外,您使用的是字符类,因此您不需要转义点,也不需要使用那个丑陋的|,否则您也会匹配管道。尝试12|1212 它将得到匹配,而不是真正的 OP 想要的。
  • 这里有不少失败:[]指定字符,|在这里不起作用。他想要两个十进制字符。您的正则表达式允许 *.整个正则表达式必须“转过来”。
  • 现在可以了。感谢您的编辑。
【解决方案2】:

你可以试试这样的

 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");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多