代码之家  ›  专栏  ›  技术社区  ›  Hemang

如何使用RegEx测试阿拉伯语中的阿联酋数字?

  •  0
  • Hemang  · 技术社区  · 6 年前
    func isValidUAENumber() -> Bool {
        let phoneRegExAr = "^(?:\\+٩٧١|٠(٠٩٧١)?)(?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{٧}$"
        let phoneRegEx = "^(?:\\+971|0(0971)?)(?:[234679]|5[01256])[0-9]{7}$"
        let isArabic = true //(or false based on some condition)
        let useRegEx = isArabic ? phoneRegExAr : phoneRegEx
        let phonePredicate = NSPredicate(format:"SELF MATCHES %@", useRegEx)
        return phonePredicate.evaluate(with: self)
    }
    

    所以这段代码可以很好地处理英语中的阿联酋数字,现在我正在尝试用阿拉伯语检查阿联酋数字。我的想法建议我将英语数字RegEx转换为阿拉伯语数字RegEx,因此我使用在线翻译工具将英语数字转换为阿拉伯语数字,这里我有阿拉伯语数字RegEx,但应用程序会崩溃,因为我使用阿拉伯语RegEx检查阿拉伯语中的有效阿联酋数字:

    ***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法进行正则表达式匹配, 原因:无法打开模式U\U REGEX\U BAD\U INTERVAL(字符串+§, 图案^(?)?:+§|(§)?)(?:[·§]|[])[-]{§}$,第0种情况, “佳能0”

    以前有人遇到过这种情况吗?请帮忙。

    更新1 :

    enter image description here

    样品编号:

    1. 072466666 (§¤)

    更新2:

    使用正则表达式之后( "^(?:\\+٩٧١|Ù (٠٩٧١)?)(?:[٢٣٤٦٧٩]|Ù¥[٠١٢٥٦])[Ù -Ù©]{7}$" )这是由rmaddy提供的,它已停止崩溃,但仍然无法检测它是否是有效数字。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nikolas Charalambidis    6 年前

    这里描述了 Arabic script in Unicode (来源:维基百科)范围是 U+0600 U+06FF 因此正则表达式如下:

    ([\u0600-\u06FF]+)
    

    Regex101 ). 仅适用于数字,使用之间的范围 U+0660 U+0669 .