Как проверить номер ОАЭ на арабском языке с помощью RegEx? - PullRequest
0 голосов
/ 20 сентября 2018
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:

После использования RegEx ("^(?:\\+٩٧١|٠(٠٩٧١)?)(?:[٢٣٤٦٧٩]|٥[٠١٢٥٦])[٠-٩]{7}$"), предоставленного rmaddy, он прекратил сбойно все же он не определяет, является ли это действительный номер или нет.

1 Ответ

0 голосов
/ 21 сентября 2018

Там описан арабский алфавит в Unicode (источник: Википедия), и диапазон составляет от U+0600 до U+06FF, поэтому регулярное выражение, такое как:

([\u0600-\u06FF]+)

Работа.И это делает ( Regex101 ).Только для цифр используйте диапазон от U+0660 до U+0669.

...