iphone sdk – удалить все символы, кроме цифр 0-9, из строки

ОК Итак, вот план. XML, с которого я получаю данные, позволяет использовать нечисловой текст в полях телефонных номеров (для описаний или имен контактов и т. Д.). Я пытаюсь извлечь только числа и позвонить по tel: URL с ними, чтобы инициировать вызов. Вот что НЕ работает:

NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSString *number = @"(555) 555-5555 Office"; NSString *strippedNumber = [number stringByTrimmingCharactersInSet:charset]; NSString *phoneURL = [NSString stringWithFormat:@"tel:%@", strippedNumber]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneURL]]; 

если есть очевидные опечатки, они просто опечатки. 🙂

Вы используете метод обрезки, что означает, что он смотрит только на внешние края строки. Вероятно, вы получаете что-то вроде: «555) 555-555« как номер телефона, правильно?

Я не знаю метода NS (Mutable) String по строкам «replaceOccurrencesOfCharactersInSet: (NSCharacterSet *) set», и я признаю, что, вероятно, было бы очень приятно иметь.

Будучи мной, я бы просто использовал регулярное выражение. Если вы используете RegexKitLite , то вы можете легко сделать:

 #import "RegexKitLite.h" NSString * number = @"(555) 555-555 Office"; NSString * strippedNumber = [number stringByReplacingOccurrencesOfRegex:@"[^0-9]" withString:@""]; 

Это может быть немного перебор, но он будет делать именно то, что вы ищете.

FYI: «[^ 0-9]» означает «любой символ, который не является 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9».

Простое использование только API-интерфейсов iOS:

 NSString * number = @"(555) 555-555 Office"; NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])]; 

Хотя это уже было принято / принято, у меня есть лучшее решение, не требующее внешнего SDK. Создайте дополнительный метод NSString в такой категории:

 @interface NSString (Helpers) - (NSString*)stringByRemovingCharactersInSet:(NSCharacterSet*)set; @end @implementation NSString (Helpers) - (NSString*)stringByRemovingCharactersInSet:(NSCharacterSet*)set { NSArray* components = [self componentsSeparatedByCharactersInSet:set]; return [components componentsJoinedByString:@""]; } @end 

Теперь вы можете использовать stringByRemovingCharactersInSet вместо stringByTrimmingCharactersInSet. Однако я бы также рекомендовал еще одно небольшое изменение в вашем примере кода для поддержки символа «+» в международных номерах:

 NSString* number = @"(555) 555-555 Office"; NSCharacterSet* phoneChars = [NSCharacterSet characterSetWithCharactersInString:@"+0123456789"]; NSString* strippedNumber = [number stringByRemovingCharactersInSet:[phoneChars invertedSet]]; NSString* urlString = [NSString stringWithFormat:@"tel:%@", strippedNumber]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]]; 
  • Преобразование NSString в NSDictionary / JSON
  • Шифрование AES для NSString на iPhone
  • Вырезать пробелы с конца NSString
  • Относительная строка из NSDate
  • Как получить подстроку NSString?
  • С чем следует заменить устаревший метод sizeWithFont:?
  • Ярлыки в Objective-C для конкатенации NSStrings
  • NSString для CFStringRef и CFStringRef для NSString в ARC?
  • Замена строк в Objective-C
  • NSString для NSDate
  • NSString - преобразовать только в чистый алфавит (т.е. удалить акценты + пунктуацию)
  • Давайте будем гением компьютера.