Как применить шаблон мобильного номера на UITextField в Swift - PullRequest
1 голос
/ 22 апреля 2019

Мне нужно получить номер мобильного телефона пользователя на персидском и английском . И примените шаблон номера телефона, чтобы показать. Я нашел два решения , у каждого из них есть проблема .

Номер 1:

extension String{
    func applyPatternOnNumbers(pattern: String) -> String {
        let  replacmentCharacter: Character = "#"
        var pure = self.replacingOccurrences( of: "[^۰-۹0-9]", with: "", options: .regularExpression)
        for index in 0 ..< pattern.count {
            guard index < pure.count else { return pure }
            let stringIndex = String.Index.init(encodedOffset: index)
            let patternCharacter = pattern[stringIndex]
            guard patternCharacter != replacmentCharacter else { continue }
            pure.insert(patternCharacter, at: stringIndex)
        }
       return pure
    }
 }

использовать при редактировании. Изменено

class ViewController: UIViewController, UITextFieldDelegate {

    let textField = UITextField()
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.frame = CGRect(x: 10, y: 50, width: 300, height: 50)
        textField.delegate = self
        textField.backgroundColor = UIColor.lightGray
        textField.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        self.view.addSubview(textField)
    }

    @objc func editingChanged(){
        let pattern = "+# (###) ###-####"
        let mobile = textField.text
        textField.text = mobile!.applyPatternOnNumbers(pattern: pattern)
    }
}

Когда номер набирается на английском языке, например +1800444777 результат // +1 (800) 444-7777

Но когда персидские цифры набираются, например, +۱۸۰۰۴۴۴۷۷۷ результат такой // +۱ (۸۩ ´۷۷۷ ?

Номер 2:

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

использовать этот метод так же, как и предыдущий метод Этот метод работает на английском и персидском

Английский"+1800444777" результат равен // +1 (800) 444-7777 Persian Результат "+۱۸۰۰۴۴۴۷۷۷" равен // +۱ (۸۰۰) ۴۴۴-۷۷۷۷

Но проблема в том, что space & -, (, ), + символы невозможно удалить при редактировании textfield

1 Ответ

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

Пожалуйста, замените расширение Number 2 следующим:

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 {
            guard pureNumberIndex < pureNumber.endIndex else { return result }
            if patternCharacter == replacmentCharacter {
                result.append(pureNumber[pureNumberIndex])
                pureNumber.formIndex(after: &pureNumberIndex)
            } else {
                result.append(patternCharacter)
            }
        }
        return result
    }
}

Этот обновленный код проверяет, достигает ли pureNumberIndex конец или нет, немного раньше, чем предыдущая версия.

С этим изменением pattern должен заканчиваться replacmentCharacter.Я надеюсь, что все шаблоны, которые вы перечислили, заканчиваются на "#".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...