我想只允许字符串的特定字符。
这是我尝试过的。
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-
我不知道是什么造成了这个结果。
答案 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:@""];