带正则表达式的电话号码掩码会在Swift中返回加号

时间:2018-08-08 12:11:45

标签: ios swift mask

我正在使用以下算法将电话号码屏蔽为“(###)########”。 当用户开始在UITextfield中键入内容时,它会很好用。但是,当我删除空格或括号后再写一个数字时,它会在文本字段中再添加一个数字,并且会变成“(###)########”。我在哪里做错了?

算法:

func applyPatternOnNumbers(pattern: String = "(###) ### ## ##", replacmentCharacter: Character = "#") -> String {
    var pureNumber = self.replacingOccurrences( of: "[^0-9]", with: "", options: .regularExpression)
    for index in 0 ..< pattern.count {
        guard index < pureNumber.count else { return pureNumber }
        let stringIndex = String.Index(encodedOffset: index)
        let patternCharacter = pattern[stringIndex]
        guard patternCharacter != replacmentCharacter else { continue }
        pureNumber.insert(patternCharacter, at: stringIndex)
    }
    return pureNumber
}

我如何实现它:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
     if let text = textField.text {
         phoneLbl.text = text.applyPatternOnNumbers()
     }
}

顺便说一下,我愿意尝试新的方法。我检查了以下帖子和AnyFormatterKit框架,但没有任何帮助。

Formattting Phone number in Swift

0 个答案:

没有答案