gpt4 book ai didi

ios - 如何限制文本字段小数

转载 作者:搜寻专家 更新时间:2023-11-01 05:57:56 24 4
gpt4 key购买 nike

如何通过这种方式限制多个UItextField的长度:

最大整数允许两位,最大小数允许一位。

我使用此代码将文本限制为两个数字:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

var kMaxLength = 2
let oldString = textFieldlOne.text as NSString

let string = oldString.stringByReplacingCharactersInRange(range, withString: string)


return countElements(string) <= kMaxLength

}

但我有几个 UITextfield IBOutlet,我希望允许用户插入一个十进制数 es。 12.5

最佳答案

在尝试测试字符串是否与特定模板匹配时,正则表达式很有用:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let oldString = textField.text ?? "" as NSString
let candidate = oldString.stringByReplacingCharactersInRange(range, withString: string)
let regex = try? NSRegularExpression(pattern: "^\\d{0,2}(\\.\\d?)?$", options: [])
return regex?.firstMatchInString(candidate, options: [], range: NSRange(location: 0, length: candidate.characters.count)) != nil
}

\d{0,2} 匹配零到两位数字。 (\.\d?)? 翻译为“如果有小数点,允许它和可选的多一位数字。” (您也可以执行 (\.\d{0,1})?。) ^ 匹配“字符串的开头”和 $ 匹配“字符串结尾”(即,我们只会找到 \d{0,2}(\.\d?)? 是整个字符串的匹配项,而不仅仅是出现在字符串中间的东西。)当然,所有这些 \ 字符在字符串文字中都被转义为 \\ .

当您第一次遇到正则表达式 (regex) 时,它可能有点“密集”,但是一旦您熟悉了语法,它就是一个非常强大的工具。

--

顺便说一下,我注意到您在评论中说您使用的是 Swift 1.1。我相信等效的 Swift 1.1 语法应该是这样的:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let oldString = textField.text as NSString
let candidate = oldString.stringByReplacingCharactersInRange(range, withString: string)
var error: NSError?
let regex = NSRegularExpression(pattern: "^\\d{0,2}(\\.\\d?)?$", options: 0, error: &error)
return regex?.firstMatchInString(candidate, options: 0, range: NSRange(location: 0, length: candidate.length)) != nil
}

我没有现成的 Swift 1.1 编译器,所以我无法轻松地测试/确认这个 Swift 1.1 语法,但如果我没记错的话,它就是这样的。就我个人而言,我建议升级到最新版本的 Xcode,但每个版本都有自己的特点。

关于ios - 如何限制文本字段小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com