NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";
Найдя ведущий 0 или ведущий +44 один раз, почему снова искать его?
Basic упрощение приводит к
NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})";
затем к
NSString * regex = @"((07|(00|\\+)440?7)\\d{9})";
затем к
NSString * regex = @"((0|(00|\\+)440?)7\\d{9})";
но 00 не только общий префикс набора, 011 используется в США и Канады.
Добавим, что, и поворачивая порядок круглые, дает:
NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)";
или предпочтительно
NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))";
позволяя 00447, 011447, +447, 004407, 0114407, +4407, 07 в начале , и с группами, не связанными с захватом.
Для более широкого входного согласования формата, что позволяет различные знаки препинания (дефис, скобки, пробелы) используют
NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)";
Extract код 44 страны в $ 1 (пустое значение, если введенное число в 07 ...) и 10- цифровой NSN в $ 2.
Однако имейте в виду, что цифры, начинающиеся с 070 и 076 (кроме 07624), НЕ являются мобильными номерами.
В последней схеме:
NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)";
Извлечение NSN в $ 2, затем удалить все цифры, не являющиеся из него для дальнейшей обработки.
Невозможно использовать регулярные выражения? pls дайте мне знать – user198725878