Подтвердить что ты не робот

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]];

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

4b9b3361

Ответ 1

Вы используете метод обрезки, что означает, что он смотрит только на внешние края строки. Вероятно, вы получаете что-то вроде: "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".

Ответ 2

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

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

Ответ 3

Хотя это уже было принято/принято, у меня есть лучшее решение, не требующее внешнего 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]];