Удалить недопустимые символы из NSString

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

Вот что я попробовал.

NSString *mdn = @"010-222-1111";

NSCharacterSet *allowedCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"+0123456789"];
NSString *trimmed = [mdn stringByTrimmingCharactersInSet:[allowedCharacterSet invertedSet]];
NSString *replaced = [mdn stringByReplacingOccurrencesOfString:@"-" withString:@""];

Результат кода выше, как показано ниже. Результат заменил то что я хочу.

trimmed : 010-222-1111
replaced : 0102221111

Что мне здесь не хватает? Почему не invertedSet Работа?

Еще одна странная вещь здесь. Если бы я удалил invertedSet часть как

NSString *trimmed = [mdn stringByTrimmingCharactersInSet:allowedCharacterSet];

Результат

trimmed : -222-

Я понятия не имею, что делает этот результат.

2 ответа

Решение

stringByTrimmingCharactersInSet: удаляет только вхождения в начале и конце строки. Вот почему, когда вы берете перевернутый набор, в начале и конце строки не найдено никаких возможных символов и, следовательно, они также не удаляются.

Решение будет:

- (NSString *)stringByRemovingCharacters:(NSString*)str inSet:(NSCharacterSet *)characterSet {
    return [[str componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
}

stringByTrimmingCharactersInSet удаляет только символы в конце и начале строки, что приводит к -222-. Вы должны сделать небольшой трюк, чтобы удалить все символы в наборе

 NSString *newString = [[origString componentsSeparatedByCharactersInSet:
            [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
            componentsJoinedByString:@""];
Другие вопросы по тегам