swift 中的正则表达式之外的退格键不起作用

backspace not work in outside of regex in swift

我使用此方法在 .editingChange 事件中对 UITextField 中的 phone 数字进行模式化 但是删除键只删除数字

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
    }
}

在 editingChange 事件中使用

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 & - , ( , ) 个字符无法删除

您尝试的正则表达式不只考虑数字:

[^۰-۹0-9]

我不确定,但您可以将其更改为:

[^۰-۹0-9\s-\(\)]

它可能会起作用。您可以在 [] 内的特殊字符之前添加 \ ,您可以将不需要替换的任何其他字符添加到其中。

或者您可以将其简化为

[^\d\s-\(\)]

它可能会起作用。

方法二

您可以使用此 RegEx,它与您拥有的 phone 数字格式完全匹配:

\+\d+\s\(\d{3}\)\s\d{3}-\d{4}

如果不需要,您可以删除第一个 +

\d+\s\(\d{3}\)\s\d{3}-\d{4}