我正在使用以下算法将电话号码屏蔽为“(###)########”。 当用户开始在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框架,但没有任何帮助。