从 NSString 中删除不允许的字符
Remove unallowed characters from 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-
我不知道是什么导致了这个结果。
stringByTrimmingCharactersInSet:
仅删除字符串开头和结尾的匹配项。这就是为什么当你采用倒置集时,在字符串的开头和结尾找不到可行的字符,因此也不会被删除。
一个解决方案是:
- (NSString *)stringByRemovingCharacters:(NSString*)str inSet:(NSCharacterSet *)characterSet {
return [[str componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
}
stringByTrimmingCharactersInSet 仅删除字符串末尾和开头的字符,结果为 -222-。你必须做一些小技巧来删除集合中的所有字符
NSString *newString = [[origString componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
我只想允许字符串的特定字符。
这是我试过的方法。
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-
我不知道是什么导致了这个结果。
stringByTrimmingCharactersInSet:
仅删除字符串开头和结尾的匹配项。这就是为什么当你采用倒置集时,在字符串的开头和结尾找不到可行的字符,因此也不会被删除。
一个解决方案是:
- (NSString *)stringByRemovingCharacters:(NSString*)str inSet:(NSCharacterSet *)characterSet {
return [[str componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
}
stringByTrimmingCharactersInSet 仅删除字符串末尾和开头的字符,结果为 -222-。你必须做一些小技巧来删除集合中的所有字符
NSString *newString = [[origString componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];