Backspace не работает за пределами регулярных выражений в Swift - PullRequest
1 голос
/ 22 апреля 2019

Я использую этот метод для создания номера телефона в UITextField при событии .editingChange. Но клавиша удаления удаляет только цифры, которые

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 & -, (, ) символы не могут быть удалены

1 Ответ

1 голос
/ 22 апреля 2019

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}

enter image description here

...