最近在項目中遇到過濾某些特殊字符和表情的需求,有正則表達式和NSCharacterSet兩種方法可以實現此需求。
1 NSCharacterSet方法,詳細的具體API請查閱文檔。
- (NSString *)ttLegalNickName
{
//合法字符集合
NSCharacterSet *legalPunctuationCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@",.·,。?、"];
//英文和數字字符集合
NSCharacterSet *alphanumericCharacterSet = [NSCharacterSet alphanumericCharacterSet];
//中文字符集合
NSCharacterSet *chineseSet = [NSCharacterSet ttChineseSet];
//合法字符 英文和數字字符 中文字符 并集的集合
NSMutableCharacterSet *characterSet = [[NSMutableCharacterSet alloc] init];
[characterSet formUnionWithCharacterSet:legalPunctuationCharacterSet];
[characterSet formUnionWithCharacterSet:alphanumericCharacterSet];
[characterSet formUnionWithCharacterSet:chineseSet];
// 除去合法字符 英文和數字字符 中文字符 并集的集合的補集
NSCharacterSet *illegalCharacterSet = characterSet.invertedSet;
// 將非法字符過濾成 @""
NSString *legalNickName = [[self componentsSeparatedByCharactersInSet:illegalCharacterSet] componentsJoinedByString:@""];
// 將合法字符過濾成 @"·"
legalNickName = [[legalNickName componentsSeparatedByCharactersInSet:legalPunctuationCharacterSet] componentsJoinedByString:@"·" ];
return legalNickName;
}
+ (NSCharacterSet *)ttChineseSet
{
// 中文字符集合
static NSCharacterSet *chineseSet;
if (chineseSet == nil)
{
NSMutableCharacterSet *aCharacterSet = [[NSMutableCharacterSet alloc] init];
NSRange lcEnglishRange;
lcEnglishRange.location = (unsigned int)0x4e00;
lcEnglishRange.length = (unsigned int)0x9fa5 - (unsigned int)0x4e00;
[aCharacterSet addCharactersInRange:lcEnglishRange];
chineseSet = aCharacterSet;
}
return chineseSet;
}
以上可以根據自己的需求去靈活配置建立分類。
2 正則方法, 后續(xù)更新