Проверка или проверка персидской (фарси) строки swift
Я искал по веб-страницам и переполнению стека о проверке строки персидского (фарси) языка. Большинство из них упомянули арабские буквы. Кроме того, я хочу знать, является ли моя строка полностью персидской (не содержит). например, эти строки являются персидскими:
"چهار راه"
"خیابان."
И это не так:
"خیابان 5"
"Copyرا copy کردی؟"
Также допускаются только персидские или арабские цифры. Существуют исключения для символов [.,-!] (Поскольку клавиатура не поддерживает эти символы на персидском языке)
ОБНОВЛЕНИЕ: я объяснил быструю версию использования регулярных выражений и предикатов в моем ответе.
2 ответа
Через некоторое время я смог найти лучший способ:
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/
http://userguide.icu-project.org/strings/regexp
Не стесняйтесь и задайте любой вопрос по этой теме:D
Основанный на этом расширении, найденном в другом месте:
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
наслаждаться