检查或验证波斯语(波斯语)字符串 swift
Check or validation Persian(Farsi) string swift
我搜索了有关波斯语(波斯语)语言字符串验证的网页和堆栈溢出。其中大部分都提到了阿拉伯字母。另外,我想知道我的字符串是否完全是波斯语(不包含)。
例如,这些字符串是波斯语:
“caster”
"خابان."
而这些不是:
"خابان 5"
“cast copy caster”
此外,只允许使用波斯语或阿拉伯语数字。 [.,-!] 字符有例外(因为键盘不支持波斯语中的这些字符)
更新:
我在回答中解释了使用正则表达式和谓词的 swift 版本。
基于在别处找到的这个扩展:
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
尽情享受
经过一段时间我找到了更好的方法:
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
[编辑] 以下正则表达式可用于接受拉丁数字,因为它们在波斯文本中大多被接受
"([-.]*\s*[-.]*\p{Arabic}*[0-9]*[-.]*\s*)*[-.]*"
我搜索了有关波斯语(波斯语)语言字符串验证的网页和堆栈溢出。其中大部分都提到了阿拉伯字母。另外,我想知道我的字符串是否完全是波斯语(不包含)。 例如,这些字符串是波斯语:
“caster”
"خابان."
而这些不是:
"خابان 5"
“cast copy caster”
此外,只允许使用波斯语或阿拉伯语数字。 [.,-!] 字符有例外(因为键盘不支持波斯语中的这些字符)
更新: 我在回答中解释了使用正则表达式和谓词的 swift 版本。
基于在别处找到的这个扩展:
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
尽情享受
经过一段时间我找到了更好的方法:
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
[编辑] 以下正则表达式可用于接受拉丁数字,因为它们在波斯文本中大多被接受
"([-.]*\s*[-.]*\p{Arabic}*[0-9]*[-.]*\s*)*[-.]*"