我使用此方法在.editingChange事件中在UITextField中对电话号码进行模式化
但是删除键只会删除数字
extension String{
func applyPatternOnNumbers(pattern: String) -> String {
let replacmentCharacter: Character = "#"
let pureNumber = self.replacingOccurrences( of: "[^۰-۹0-9]", with: "", options: .regularExpression)
var result = ""
var pureNumberIndex = pureNumber.startIndex
for patternCharacter in pattern {
if patternCharacter == replacmentCharacter {
guard pureNumberIndex < pureNumber.endIndex else { return result }
result.append(pureNumber[pureNumberIndex])
pureNumber.formIndex(after: &pureNumberIndex)
} else {
result.append(patternCharacter)
}
}
return result
}
}
在editChange事件中使用
let pattern = "+# (###) ###-####"
let mobile = textField.text.substring(to: pattern.count-1)
textfield.text = mobile.applyPatternOnNumbers(pattern: pattern)
// print(textfield.text) +1 (800) 666-8888
问题是无法删除
space
和-
,(
,)
字符 最佳答案
您正在尝试的RegEx不仅仅考虑数字:
[^۰-۹0-9]
我不确定,但是您可以将其更改为:
[^۰-۹0-9\s-\(\)]
它可能会起作用。您可以在
[]
中的特殊字符之前添加一个\,并且可以将不需要替换的其他任何字符添加到其中。或者您可以将其简化为
[^\d\s-\(\)]
它可能会起作用。
方法2
您可以使用此RegEx与您所拥有的电话号码格式完全匹配:
\+\d+\s\(\d{3}\)\s\d{3}-\d{4}
如果不需要,您可以删除第一个+
\d+\s\(\d{3}\)\s\d{3}-\d{4}
关于ios - 退格键无法在正则表达式外部快速运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55789937/