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

如何校验UITextField中0~20带小数点的输入内容

UITextField数字输入校验:0~20范围+规范格式限制

需求明确:

  • 输入的带小数点数字必须落在 0~20 区间内(比如0.01、19.99都是合法值)
  • 禁止输入001、02这类带无效前导零的不规范格式

以下是实现上述需求的Swift代码:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        
    guard let text = textField.text as NSString? else { return false }
    let finalText = text.replacingCharacters(in: range, with: string)
    
    // 空文本允许(删除内容时合法)
    if finalText.isEmpty { return true }
    
    // 允许"0."开头的合法格式(比如0.01)
    if finalText.first == "0" && finalText.prefix(2) == "0." { return true }
    
    // 校验数字是否在0~20范围内
    guard let num = Double(finalText), num >= 0, num <= 20 else {
        return false
    }
    
    // 限制最多两位小数:对比格式化后字符串长度,避免输入超过两位小数
    let numString = String(format: "%.2f", num)
    if finalText.count > numString.count {
        return false
    }
    
    return true
}

关键逻辑说明:

  • 先计算输入变更后的最终文本finalText,以此为基准做全量校验
  • 空文本直接放行,保证用户可以正常删除内容清空输入框
  • 单独处理0.开头的情况,避免合法的小数格式被误拦截
  • 通过转换为Double校验数值范围,不在0~20区间的输入直接拒绝
  • 用%.2f格式化后的字符串长度做对比,确保输入不会超过两位小数(比如输入12.345时,格式化后是12.35,长度为5,而输入的12.345长度为6,会被拦截)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:50:38