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
相关产品推荐
相关产品推荐

