我想检查在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
}
}
无法使它正常工作。任何帮助表示赞赏。
答案 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)