2015-02-25 3 views
0

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

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

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

NSCharacterSet *allowedCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@""]; 
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- 

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

+0

Также проверьте http://stackoverflow.com/questions/1129521/remove-all-but-numbers-from-nsstring – Arkku

ответ

3

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

Раствор будет:

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

работал отлично. Благодарю. Я добавил это в категорию «NSString». – Ryan

0

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

NSString *newString = [[origString componentsSeparatedByCharactersInSet: 
      [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
      componentsJoinedByString:@""]; 
Смежные вопросы