Правильный шаблон регулярного выражения будет [^۰-۹0-9]
, но вы используете String.Index.init(encodedOffset:)
неправильно. (Многие программисты используют его неправильно, поэтому в Swift 5 это устарело.)
Я немного переписал ваше расширение, чтобы оно работало со Swift 5 и более поздними версиями:
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
}
}
Примеры:
do {
let mobile = "+18004449999"
let pattern = "+# (###) ###-####"
let result = mobile.applyPatternOnNumbers(pattern: pattern)
print("result \(result)") //->result +1 (800) 444-9999
}
do {
let mobile = "+۰۹۸۹۱۲۳۴۵۶۷۸۹"
let pattern = "+## (###) ###-####"
let result = mobile.applyPatternOnNumbers(pattern: pattern)
print("result \(result)") //->result +۰۹ (۸۹۱) ۲۳۴-۵۶۷۸
}
Пожалуйста, попробуйте.