ios - 如何使用正则表达式测试阿拉伯语的阿联酋号码?

标签 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)
}

所以这段代码在阿拉伯语的阿联酋号码上运行良好,现在我正在尝试检查阿拉伯语的阿联酋号码。我的想法建议我将英语数字正则表达式转换为阿拉伯数字正则表达式,所以我使用在线翻译工具将英语转换为阿拉伯数字正则表达式,这里我有阿拉伯数字正则表达式,但应用程序会崩溃,因为我使用阿拉伯正则表达式来检查阿拉伯语的有效阿联酋号码:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't do regex matching, reason: Can't open pattern U_REGEX_BAD_INTERVAL (string +٩٧١٥٢٥٣٩٥٧٥٧, pattern ^(?:+٩٧١|٠(٠٩٧١)?)(?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{٧}$, case 0, canon 0)'

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

更新 1:

这就是阿拉伯正则表达式在 Xcode 中的样子? enter image description here

示例数字:

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

可以转换成阿拉伯数字来测试吗?

更新 2:

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

最佳答案

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

([\u0600-\u06FF]+)

应该可以。确实如此( Regex101 )。仅对于数字,请使用 U+0660U+0669 之间的范围。

关于ios - 如何使用正则表达式测试阿拉伯语的阿联酋号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417000/

相关文章:

Python 使用正则表达式将文本拆分为标记

ios - 在 iOS 中构建高级均衡器

ios - 如何在 swift 2.3 中按升序对数组进行排序

ios - 带时间的 NSDate 列,需要仅根据日期取回唯一值

ios - 无法将 IBAction 连接到 XIB 中的 UITextField (Swift)

swift - 为只读计算属性赋值

c# - 正则表达式强制和可选组

python - 在 re.sub 中使用变量,用于 Python 解析多个日期时间格式的字符串?

ios - 如何从 IOS Swift 'Any' 类型访问和获取嵌套值?

ios - 使用 Swift 在 TableView 中显示 JSON 数据