Ios 在swift中,退格在正则表达式之外不起作用

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:

在.editingChange事件中,我使用此方法在UITextField中对电话号码进行模式化 但是delete键只删除数字

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}