如何验证 java 中的货币字符串

How to validate the Currency String in java

假设我有一个德语格式的货币字符串:

String money="1.203.432,25";

我想检查 money 是否是有效的货币值。 “0,00”有效,“134.20,24”无效,“02,23”无效等。我怎样才能在 Java 中做到这一点?

使用本地化的数字格式(如果始终采用德语格式,则使用正则表达式)。

正则表达式可能类似于 ^(?:0|[1-9][0-9]{0,2}(?:\.[0-9]{3})*),[0-9]{2}$,使用 String#matches()Matcher#matches().

时不需要 ^$

数字格式可以是 DecimalFormat,例如 ###,##0.00,或者只使用 NumberFormat.getInstance( Locale.GERMAN )。然而,数字格式的问题是它允许数字有前导零,所以如果你想禁止那些你可以检查第一个数字是否为零。

也许 Apache CurrencyValidator 就是您要找的。

public static void main (String[] args) throws java.lang.Exception {
     BigDecimalValidator validator = CurrencyValidator.getInstance();

     BigDecimal amount = validator.validate("€ 123,00", Locale.GERMAN);

     if(amount == null){
         System.out.println("Invalid amount/currency.");
     }

}

这段代码似乎有效:

String money="23.234,00";
Pattern p=Pattern.compile("^(?:0|[1-9]\d{0,2}(?:\.\d{3})*),\d{2}$");
Matcher m=p.matcher(money);
if (m.matches()) System.out.println("valid");
else System.out.println("unvalid");

使用以下模式:“([0-9]{1,3}\.)*[0-9]{1,3}\,[0-9]{2}”

System.out.println("11.118.576.587,58".matches("([0-9]{1,3}\.)*[0-9]{1,3}\,[0-9]{2}"));