Удалить недопустимые символы из 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:@""];