Проверка или проверка персидской (фарси) строки swift - PullRequest
0 голосов
/ 07 декабря 2018

Я искал по веб-страницам и переполнению стека о проверке строки персидского (фарси) языка.Большинство из них упомянули арабские буквы.Кроме того, я хочу знать, является ли моя строка полностью персидской (не содержит).например, эти строки являются персидскими:

"چهار راه"

"خیابان."

И это не:

"خیابان 5"

"copyرا copy کردی؟"

Также разрешены только персидские или арабские цифры.Существуют исключения для символов [., -!] (Поскольку эти символы не поддерживаются на персидском языке)

ОБНОВЛЕНИЕ: в своем ответе я объяснил быструю версию использования регулярных выражений и предикатов.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Через некоторое время я мог бы найти лучший способ:

extension String {
 var isPersian: Bool {
        let predicate = NSPredicate(format: "SELF MATCHES %@",
                                    "([-.]*\\s*[-.]*\\p{Arabic}*[-.]*\\s*)*[-.]*")
        return predicate.evaluate(with: self)
    }

}

, и вы можете использовать его так:

print("yourString".isPersian) //response: true or false

Главный ключ - использование регулярных выражений и предикатов.эти ссылки помогут вам манипулировать всем, что вы хотите:

https://nshipster.com/nspredicate/

https://nspredicate.xyz/

http://userguide.icu -project.org / strings / regexp

Не стесняйтесь и задайте любой вопрос по этой теме: D

0 голосов
/ 07 декабря 2018

На основе этого расширения, найденного в другом месте:

       extension String {
           func matches(_ regex: String) -> Bool {
           return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
           }
        }

и создайте регулярное выражение, содержащее разрешенные символы, такие как

    let mystra = "چهار راه"
    let mystrb = "خیابان."
    let mystrc = "خیابان 5"
    let mystrd = "چرا copy کردی؟"      //and so on
    for a in mystra {
        if String(a).matches("[\u{600}-\u{6FF}\u{064b}\u{064d}\u{064c}\u{064e}\u{064f}\u{0650}\u{0651}\u{0020}]") {  // add unicode for dot, comma, and other needed puctuation marks, for now I added space etc

    } else {         // not in range
        print("oh no--\(a)---zzzz")
        break        // or return false 
        }
    }

. Убедитесь, что вы создали Unicode, необходимый с использованием приведенной выше модели.Результат для других строк для a в mystrb ... и т. Д. Ой нет - .--- zzzz ой нет - 5 --- zzzz ой нет - c --- zzzz

Наслаждайся

...