【问题标题】:Currency validation with Decimal using regex使用正则表达式使用 Decimal 验证货币
【发布时间】:2019-04-25 10:23:53
【问题描述】:

使用正则表达式使用 Decimal 验证货币

大家好, 我正在尝试对我的一个场景使用正则表达式。 所以我以字符串格式获取货币,我必须检查以下场景

  • 长度可以在 1-6 之间
  • 货币可能包含也可能不包含小数。
  • 小数只允许出现一次。

123.45 - 有效 1234.. - 无效 12.3 - 有效 123456 - 有效 123456.7 - 无效

我尝试了正则表达式 ^[0-9.]{1,6}$

但它不验证第三种情况(小数只允许一次)。 请帮助我提供您的意见。

【问题讨论】:

  • 您应该为此使用DecimalFormat.parse(),而不是正则表达式。它比你更了解规则。

标签: java regex


【解决方案1】:

你可以使用这个正则表达式,

^(?=[\d.]{1,6}$)\d+\.?\d+$

这里,(?=[\d.]{1,6}$) 正向预测确保文本的总长度为 1 到 6 个字符,\d+\.?\d+ 确保数字格式正确,^$ 是开始和结束锚以确保完整的字符串匹配,而不是部分匹配。

Regex Demo

Java 代码,

List<String> list = Arrays.asList("123.45","1234..","12.3","123456","123456.7");

list.forEach(x -> {
    System.out.println(x + " --> " + (x.matches("^(?=[\\d.]{1,6}$)\\d+\\.?\\d+$")?"Valid":"Invalid"));
});

输出,

123.45 --> Valid
1234.. --> Invalid
12.3 --> Valid
123456 --> Valid
123456.7 --> Invalid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多