You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java验证正则匹配问题:求支持浮点数的校验代码

解决浮点数无法通过数字校验的问题

我懂你现在的困扰——原来的正则表达式[0-9]+只能匹配纯整数,所以像123.45这种浮点数自然过不了校验。下面是调整后的完整代码,我顺便给你拆解一下修改点:

核心修改点

原来的正则只匹配连续的数字,完全没考虑浮点数的小数点结构。我们需要把正则改成能兼容整数和浮点数的模式:

  • ^\\d+(\\.\\d+)?$:这个模式可以匹配整数(比如123)和标准浮点数(比如123.45),其中小数点和后面的数字是可选的,但如果有小数点,后面必须跟至少一个数字。
  • 如果你的场景允许用户输入带正负号的金额(比如-123.45或+99.9),可以把正则改成^[-+]?\\d+(\\.\\d+)?$

修改后的完整代码

String paidText = Purchase_Paid.getText().trim(); // 先去掉首尾空格,避免空格导致校验失败
if (paidText.matches("^\\d+(\\.\\d+)?$")) {
    try {
        Global_Total = Float.parseFloat(Purchase_Amount.getText().trim());
        Globle_paidAmount = Float.parseFloat(paidText);
        GlobleOutStandingAmount = (Global_Total - Globle_paidAmount);
        Purchase_Outstanding.setText(String.valueOf(GlobleOutStandingAmount));
    } catch (NumberFormatException e) {
        // 极端情况(比如正则漏判的异常输入)下的兜底处理
        Alert alert = new Alert(Alert.AlertType.WARNING);
        alert.setTitle("Validation");
        alert.setHeaderText(null);
        alert.setContentText("Invalid number format in Amount or Paid fields");
        alert.showAndWait();
    }
} else {
    Alert alert = new Alert(Alert.AlertType.WARNING);
    alert.setTitle("Validation");
    alert.setHeaderText(null);
    alert.setContentText("Please enter only numbers (including decimals) in Paid fields");
    alert.showAndWait();
}

额外提示

  • 我加了.trim()来去除输入的首尾空格,避免用户不小心输入空格导致校验失败
  • 增加了try-catch捕获NumberFormatException,虽然正则已经过滤了大部分非法输入,但极端情况(比如用户输入123..45)下还是可能抛出异常,加个兜底处理更稳妥
  • 如果需要允许用户输入123.这种末尾带小数点的格式,可以把正则改成^\\d+(\\.\\d*)?$

内容的提问来源于stack exchange,提问作者jadhav rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:27:46