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

如何扩展TextField以支持单个小数点及两位小数的货币输入?

实现TextField的货币输入限制

这个需求很常见,我帮你调整一下监听器的逻辑,既能保留数字输入的基础限制,又能支持带两位小数的货币格式:

foodPrice.textProperty().addListener((observable, oldValue, newValue) -> {
    // 定义合法输入的正则:允许开头0个或多个数字 + 最多1个小数点 + 小数点后最多2位数字
    if (!newValue.matches("^\\d*\\.?\\d{0,2}$")) {
        // 分三步清理非法输入:
        String cleanedValue = newValue
            // 第一步:移除所有非数字、非小数点的字符
            .replaceAll("[^\\d.]", "")
            // 第二步:只保留第一个小数点,去掉后续多余的小数点
            .replaceAll("(\\.)(.*?)\\.", "$1")
            // 第三步:如果小数点后超过两位,截断后面的部分
            .replaceAll("(\\.\\d{2}).*", "$1");
        
        // 额外处理:如果清理后只剩一个小数点,清空输入(可选,根据你的需求调整)
        if (cleanedValue.equals(".")) {
            foodPrice.setText("");
        } else {
            foodPrice.setText(cleanedValue);
        }
    }
});

逻辑拆解:

  • 正则匹配规则 ^\d*\.?\d{0,2}$:确保输入的内容要么是纯数字,要么是带一个小数点且小数点后最多两位的格式,比如123、12.3、12.34都是合法的。
  • 清理步骤:
    1. 先过滤掉所有非数字和非小数点的字符,避免字母、符号等非法输入;
    2. 保证整个输入里最多只有一个小数点,防止用户输入多个.;
    3. 强制限制小数点后只能有两位数字,超出部分直接截断;
    4. 最后可选处理纯小数点的情况,避免用户只输入.这种无意义的内容。

这样调整后,你的TextField就完全符合货币金额的输入需求啦!

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

相关产品推荐
方舟 Agent Plan

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

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