Номера контактных номеров iOS 7 не являются пробелами - программирование

Номера контактных номеров iOS 7 не являются пробелами

В моем приложении я пытаюсь получить список контактного номера и попытаться выполнить операции над ними. Я понял, что всякий раз, когда я добавляю новые контакты (после обновления до iOS 7), новое форматирование контактов изменилось, так как во вновь добавленных номерах есть интервалы.

Использование обычных методов замены не удаляет пробелы.

Являются ли эти пространства или что это такое? моя цель - вернуть бесплатный номер пространства.

например, если число 1 818 323 323 323, я хочу получить 1818323323323

4b9b3361

Ответ 1

Я рассматривал это как не избавляющийся от "пробелов", но оставляя только десятичные символы. Этот код сделал это для меня:

phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

Это выводит все, что не число 0-9.

Ответ 2

Попробуйте следующее:

NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];

Это должно работать для любого пространства (которого много). Это может показаться несколько неэффективным, но для телефонных номеров это должно быть нормально.

Ответ 3

Некоторые номера телефонов iOS7 закодированы без разрыва. Попробуйте следующее:

        NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

Ответ 4

После слишком большой очистки строк я наконец нашел ответ после печати CFStringRef прямо из адресной книги. Вот что происходит за кулисами...

  • Добавьте контакт в iOS7, и Apple сохранит это: (555).555-5555 (где на самом деле U00A0 или & nbsp)
  • Мое приложение копирует контактную информацию в CFStringRef из AddressBook (когда NSLogged показывает.)
  • CFStringRef передается в NSString (теперь NSLog показывает 555\U00a0555-5555)

Чтобы удалить \U00A0, я попробовал 3 ответа из этого потока и [NSCharacterSet characterSetWithRange: (160,1)], который не работал. В конце концов, это была строка кода:

phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""];

//где @ "." был создан путем ввода опции + пробел

Ответ 5

Самое чистое решение, которое я использую в своих приложениях:

NSMutableCharacterSet *phoneNubmerCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"+"];
[phoneNubmerCharacterSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
NSString* phoneString = [[phoneString componentsSeparatedByCharactersInSet:[phoneNubmerCharacterSet invertedSet]] componentsJoinedByString:@""];

Нет "если" логика, содержит + число, удаляет всевозможные случайные нежелательные символы

Ответ 6

Я сделал небольшую корректировку ответа плаката, если кто-то хочет сохранить + в начале номера.

Я сделал эту небольшую настройку, если вы хотите сохранить плюс после удаления пробелов.

 Boolean shouldAddPlus = NO;

 if([[phoneNumber substringToIndex:1] isEqualToString:@"+"])
    {
        shouldAddPlus = YES;
    }

 phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

 if(shouldAddPlus)
    phoneNumber = [base stringByAppendingString:phoneNumber];

Ответ 7

Другой (очень гибкий) вариант - использовать регулярное выражение. Это позволяет сохранить + или любые другие символы, которые вы хотите сохранить.

let numberFromAddressBook = "+1 818 323 323 323"

let cleanNumber = numberFromAddressBook.stringByReplacingOccurrencesOfString("[^0-9+]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil)

"+1818323323323"

Ответ 8

Правильное решение состоит в том, чтобы заменить вхождения допустимым пробелом

NSString *clean = [dirty stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "];

Итак, вы не теряете пространство, и пользователь видит, что видит в других приложениях.