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:
示例数字:
- 072466666 (٠٧٢٤٦٦٦٦٦)
- +97172466666 (+)
可以转换成阿拉伯数字来测试吗?
更新 2:
使用正则表达式后 ("^(?:\\+٩٧١|٠(٠٩٧١)?)(?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{7}$"
) 由 rmaddy 提供,它已停止崩溃,但仍未检测它是否为有效数字。
最佳答案
描述了Arabic script in Unicode (来源:维基百科)并且范围是从 U+0600
到 U+06FF
因此正则表达式例如:
([\u0600-\u06FF]+)
应该可以。确实如此( Regex101 )。仅对于数字,请使用 U+0660
和 U+0669
之间的范围。
关于ios - 如何使用正则表达式测试阿拉伯语的阿联酋号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417000/