如何使用RegEx测试阿拉伯语中的阿拉伯联合酋长国号码?

时间:2018-09-20 03:10:01

标签: ios swift regex arabic arabic-support

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(字符串+٩٧١٥٢٥٣٩٥٧٥٧,   模式^(?:+ ٩٧١ | ٠(٠٩٧١)?)(?:[٢٣٤٦٧٩] | ٥ [٠١٢٥٦])[٠-٩] {٧} $,情况0,   佳能0)'

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

更新1

这是阿拉伯语RegEx在Xcode中的外观吗? enter image description here

样品编号:

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

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

更新2:

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

1 个答案:

答案 0 :(得分:0)

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

([\u0600-\u06FF]+)

应该工作。而且确实如此(Regex101)。仅对于数字,使用U+0660U+0669之间的范围。