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

如何修改macOS的NumberFormatter使其支持输入数字与小数点

macOS NumberFormatter 支持小数输入的调整方案

你现有的代码仅校验输入是否可转为整数,所以会拦截带小数点的输入,按如下方式修改即可实现仅允许数字和最多1个小数点的效果:

修改后的完整代码

class DecimalOnlyValueFormatter: NumberFormatter {
    
    override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
        
        // 允许清空输入
        if partialString.isEmpty {
            return true
        }
        
        // 可选:限制输入长度,可根据需求调整数值
        if partialString.count > 8 {
            return false
        }
        
        // 校验规则:仅允许数字和最多1个小数点
        let regex = "^[0-9]*\\.?[0-9]*$"
        let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
        return predicate.evaluate(with: partialString)
    }
}

核心调整说明

  • 将原来的整数校验逻辑替换为正则匹配,^[0-9]*\\.?[0-9]*$ 规则确保输入只能包含数字和最多1个小数点,支持开头输入小数点(如.35)的场景
  • 如果需要适配不同地区的小数点符号(比如部分地区用逗号作为小数分隔符),可以替换正则里的.为Locale.current.decimalSeparator ?? "."即可适配系统区域设置
  • 如果不允许开头输入小数点,可以把正则调整为^[0-9]+\\.?[0-9]*$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:54:03