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

UITextField十进制输入有效性校验:如何限制仅输入一个小数点

UITextField 十进制输入单小数点限制实现

你现有的代码已经完成了非法字符过滤的基础逻辑,仅需要补充小数点数量校验即可,修改后的完整代码如下:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == areaTextField {
        // 原有逻辑:仅允许输入数字和小数点
        guard CharacterSet(charactersIn: "0123456789.").isSuperset(of: CharacterSet(charactersIn: string)) else {
            return false
        }
        // 新增逻辑:校验小数点总数不超过1个
        let currentText = textField.text ?? ""
        let finalText = (currentText as NSString).replacingCharacters(in: range, with: string)
        let dotNumber = finalText.filter { $0 == "." }.count
        guard dotNumber <= 1 else {
            return false
        }
        // 可选拓展:如果需要限制小数点后位数,比如保留2位小数,可新增以下逻辑
        /*
        if let dotIndex = finalText.firstIndex(of: ".") {
            let decimalLength = finalText.distance(from: dotIndex, to: finalText.endIndex) - 1
            guard decimalLength <= 2 else {
                return false
            }
        }
        */
    }
    return true
}

核心校验逻辑说明:

  • 先将输入框原有内容和本次输入的字符串拼接,得到输入完成后的完整文本
  • 统计完整文本中小数点的总数量,只要超过1个就直接拦截本次输入
  • 逻辑兼容全选替换、中间插入、末尾追加等所有输入场景,不会出现判断偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:06:01