Ios 在swift中,退格在正则表达式之外不起作用
在.editingChange事件中,我使用此方法在UITextField中对电话号码进行模式化 但是delete键只删除数字Ios 在swift中,退格在正则表达式之外不起作用,ios,swift,regex,string,uitextfield,Ios,Swift,Regex,String,Uitextfield,在.editingChange事件中,我使用此方法在UITextField中对电话号码进行模式化 但是delete键只删除数字 extension String{ func applyPatternOnNumbers(pattern: String) -> String { let replacmentCharacter: Character = "#" let pureNumber = self.replacingOccurrences( of:
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
}
}
<问题>代码>空间<代码> >代码> ->代码>代码>(<代码> >代码> <代码>字符不能删除 < p>您尝试的正则表达式是不考虑数字:
[^۰-۹0-9]
我不确定,但您可以将其更改为:
[^۰-۹0-9\s-\(\)]
它可能会起作用。您可以只在[]
中的特殊字符之前添加一个\即可,您可以将不需要替换的任何其他字符添加到其中
或者你可以把它简化为
[^\d\s-\(\)]
这可能会奏效
方法2
您可以使用与您的电话号码格式完全匹配的格式:
\+\d+\s\(\d{3}\)\s\d{3}-\d{4}
如果不需要,可以删除第一个+
\d+\s\(\d{3}\)\s\d{3}-\d{4}
\d+\s\(\d{3}\)\s\d{3}-\d{4}