如何修改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
相关产品推荐
相关产品推荐

