swift удалить диакритический знак с арабского - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь удалить диакритический арабский текст.Например, мне нужно преобразовать َب в ب, вот мой код:

if (text != "") {
    for char in text! {
        print(char)
        print(char.unicodeScalars.first?.value)
        if allowed.contains("\(char)"){
            newText.append(char)
        }
    }
    self.textView.text = text!
} else {
//            TODO :
//            show an alert
    print("uhhh no way")
}

Я пробовал эти решения, но безуспешно:

Какудалить диакритические знаки из строки в Swift?

NSString: простой способ удаления акцентов UTF-8 из строки?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Вы можете использовать Regex, попробуйте этот код

 let myString = "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ"
        let regex = try! NSRegularExpression(pattern: "[\\u064b-\\u064f\\u0650-\\u0652]", options: NSRegularExpression.Options.caseInsensitive)
        let range = NSMakeRange(0, myString.unicodeScalars.count)
        let modString = regex.stringByReplacingMatches(in: myString, options: [], range: range, withTemplate: "")
        print(modString)

Вывод: الحمد لله رب العالمين

0 голосов
/ 18 сентября 2018

Используйте это расширение:

extension String {
    /// strip combining marks (accents or diacritics)
    var stripDiacritics: String {
        let mStringRef = NSMutableString(string: self) as CFMutableString
        CFStringTransform(mStringRef, nil, kCFStringTransformStripCombiningMarks, false)
        return mStringRef as String
    }
}

enter image description here

0 голосов
/ 04 июня 2018

вы можете использовать CFStringTransform с kCFStringTransformStripCombiningMarks

для удаления (accents or diacritics)

        let original = "ََب"
        let mutableString = NSMutableString(string: original) as CFMutableString
        CFStringTransform(mutableString, nil, kCFStringTransformStripCombiningMarks, Bool(truncating: 0))
        let normalized = (mutableString as NSMutableString).copy() as! NSString

        print(normalized)

CFStringTransform

Aконстанта, содержащая преобразование строки путем удаления комбинирующих меток.

kCFStringTransformStripCombiningMarks

Идентификатор преобразования в полосу комбинирующих меток (акценты или диакритические знаки).

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