首页 > 解决方案 > 如何使用 RegEx 测试阿拉伯语中的阿联酋号码?

问题描述

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,但应用程序会崩溃,因为我使用阿拉伯正则表达式检查有效的阿拉伯阿拉伯联合酋长国号码:

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法进行正则表达式匹配,原因:无法打开模式 U_REGEX_BAD_INTERVAL(字符串 +٩٧١٥٢٥٣٩٥٧٥٧,模式 ^(?:+٩٧١|٠(٠٩٧١)?) (?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{٧}$, case 0, canon 0)'

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

更新 1

这就是阿拉伯语 RegEx 在 Xcode 中的样子? 在此处输入图像描述

样品编号:

  1. 072466666 (٠٧٢٤٦٦٦٦٦)
  2. +97172466666 (+٩٧١٧٢٤٦٦٦٦٦)

您可以将它们转换为阿拉伯数字进行测试吗?

更新 2:

使用 rmaddy 提供的 RegEx ( "^(?:\\+٩٧١|٠(٠٩٧١)?)(?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{7}$") 后,它停止了崩溃,但仍然无法检测它是否是有效数字。

标签: iosswiftregexarabicarabic-support

解决方案


在 Unicode中描述了阿拉伯语脚本(来源:维基百科),范围是从U+0600U+06FF所以正则表达式,例如:

([\u0600-\u06FF]+)

应该管用。它确实(Regex101)。仅对于数字,使用 和 之间的U+0660范围U+0669


推荐阅读