我搜索了网页,并发现有关波斯(波斯语)语言字符串验证的堆栈溢出信息。他们大多数提到阿拉伯字母。另外,我想知道我的字符串是否完全是波斯语(不包含)。 例如,这些字符串是波斯语:
“چهارراه”
“خیابان。”
这些不是:
“خیابان5”
“چراcopyکردی?”
此外,只允许使用波斯或阿拉伯数字。 [。,-!]字符也有例外(因为波斯语中不支持键盘上的这些字符)
更新: 我在回答中解释了使用正则表达式和谓词的快速版本。
答案 0 :(得分:2)
基于在其他地方找到的扩展名:
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。 其他字符串的结果 在mystrb中...等等 哦不--.--- zzzz 哦,没有-5--zzzz 哦,不--c --- zzzz
享受
答案 1 :(得分:0)
一段时间后,我可以找到更好的方法:
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