在Swift

时间:2019-01-26 17:20:33

标签: ios swift uitextfield

我想检查在UI文本字段中输入的前三个字符是否为数字。我可以在Python中轻松完成此操作,但是由于某些原因,在Swift中这很痛苦。

这是我的python if语句(我想在工作时将其“翻译”为快速):

str = "123abc"                                                                  
if str.isdigit():                               
        if str[:3]:                         
            print(str)

这是我的快速代码

@IBOutlet weak var input: UITextField!

@IBAction func checkBarcodeRegion(_ sender: UIButton)
    {
        let text: String = input.text!

        if text.prefix(3)
        {
           //if numeric
               //do something
        }
    }

无法使它正常工作。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

三种选择:

从子字符串创建一个Int,然后检查是否为非零。

let isNumeric1 = Int(text.prefix(3)) != nil

使用正则表达式从子字符串中删除所有数字,并检查是否为空字符串

let isNumeric2 = text.prefix(3).replacingOccurrences(of: "[0-9]", with: "", options: .regularExpression).isEmpty

decimalDigits字符集分割子字符串,并检查组件数是否为4

let isNumeric3 = text.prefix(3).components(separatedBy: .decimalDigits).count == 4

答案 1 :(得分:1)

使用prefix是正确的方向。之后,您可以使用allSatisfy来检查它们是否全部为数字。检查数字的一种方法是检查Unicode标量是否在CharacterSet.decimalDigits集中。

text.unicodeScalars.prefix(3)
    .allSatisfy(CharacterSet.decimalDigits.contains)

这将检查Unicode中的所有数字,包括印第安人和阿拉伯人使用的数字。

如果用数字表示ASCII 0123456789,则可以使用:

text.prefix(3).allSatisfy(("0"..."9").contains)
相关问题