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

