从NSString中删除不允许的字符

时间:2015-02-25 06:43:57

标签: objective-c nscharacterset

我想只允许字符串的特定字符。

这是我尝试过的。

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 个答案:

答案 0 :(得分:3)

stringByTrimmingCharactersInSet:仅删除字符串开头和结尾的出现次数。这就是为什么当你采用倒置集时,在字符串的开头和结尾没有找到可行字符,因此也不会删除。

解决方案是:

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

答案 1 :(得分:0)

stringByTrimmingCharactersInSet仅删除字符串末尾和字符串开头的字符,结果为-222-。你必须做一个小技巧来删除集合中的所有字符

 NSString *newString = [[origString componentsSeparatedByCharactersInSet:
            [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
            componentsJoinedByString:@""];