检查或验证波斯(波斯语)字符串快速

时间:2018-12-07 11:27:03

标签: swift string validation persian farsi

我搜索了网页,并发现有关波斯(波斯语)语言字符串验证的堆栈溢出信息。他们大多数提到阿拉伯字母。另外,我想知道我的字符串是否完全是波斯语(不包含)。 例如,这些字符串是波斯语:

“چهارراه”

“خیابان。”

这些不是:

“خیابان5”

“چراcopyکردی?”

此外,只允许使用波斯或阿拉伯数字。 [。,-!]字符也有例外(因为波斯语中不支持键盘上的这些字符)

更新: 我在回答中解释了使用正则表达式和谓词的快速版本。

2 个答案:

答案 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/

https://nspredicate.xyz/

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

随意询问有关此主题的任何问题:D