Мне нужно получить номер мобильного телефона пользователя на персидском и английском .
И примените шаблон номера телефона, чтобы показать.
Я нашел два решения , у каждого из них есть проблема .
Номер 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