我使用此方法在.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 - 退格键无法在正则表达式外部快速运行-LMLPHP

关于ios - 退格键无法在正则表达式外部快速运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55789937/

10-13 03:58