iOS 过滤特殊字符和Emoji表情

最近在项目中遇到过滤某些特殊字符和表情的需求,有正则表达式和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 正则方法, 后续更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,374评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,294评论 25 709
  • 远望,那时离家月正圆。黄沙扬轱辘掩,天涯落霞染。 又一年仲秋时,酒映红烛赤。施粥山上古寺,泪目孔明逝。
    Miss二先生阅读 1,872评论 0 0
  • 全国的航站楼都差不多,极为宽敞明亮,这种色调能对人的情绪起到正向调节作用。我想正是因为光,机场的每一次别离都不会异...
    Queena女魔头阅读 3,701评论 1 51
  • 薄册子半日书,一百多页写了18个人物,按冯骥才先生自述,原名《市井人物》,感觉比俗世奇人贴切些。或者也可叫《民国天...
    boks阅读 3,660评论 0 0