iOS Emoji 表情的过滤及非法字符

简介: iOS Emoji 表情的过滤及非法字符

架构师视频资源:https://docs.qq.com/sheet/DWktzSnVXam5ZVk9J?c=D19A0A0

//判断是否是emoji表情
- (BOOL)isEmoji:(NSString *)string;
//实现
- (BOOL)isEmoji:(NSString *)string {
    if ([string length]<2)
    {
        return NO;
    }
    static NSCharacterSet *_variationSelectors;
    _variationSelectors = [NSCharacterSet characterSetWithRange:NSMakeRange(0xFE00, 16)];
    if ([string rangeOfCharacterFromSet: _variationSelectors].location != NSNotFound)
    {
        return YES;
    }
    const unichar high = [string characterAtIndex:0];
    // Surrogate pair (U+1D000-1F9FF)
    if (0xD800 <= high && high <= 0xDBFF)
    {
        const unichar low = [string characterAtIndex: 1];
        const int codepoint = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
        return (0x1D000 <= codepoint && codepoint <= 0x1F9FF);
        // Not surrogate pair (U+2100-27BF)
    }
    else
    {
        return (0x2100 <= high && high <= 0x27BF);
    }
}
   //去除表情规则
    //  \u0020-\\u007E  标点符号,大小写字母,数字
    //  \u00A0-\\u00BE  特殊标点  (¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾)
    //  \u2E80-\\uA4CF  繁简中文,日文,韩文 彝族文字
    //  \uFE30-\\uFE4F  特殊标点(︴︵︶︷︸︹)
    //  \uFF00-\\uFFEF  日文  (オカキクケコサ)
    //  \u2000-\\u201f  特殊字符(‐‑‒–—―‖‗‘’‚‛“”„‟)
    // 注:对照表 http://blog.csdn.net/hherima/article/details/9045765
- (NSString *)noEmoji;
- (NSString *)noEmoji {
    //去除表情规则
    //  \u0020-\\u007E  标点符号,大小写字母,数字
    //  \u00A0-\\u00BE  特殊标点  (¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾)
    //  \u2E80-\\uA4CF  繁简中文,日文,韩文 彝族文字
    //  \uFE30-\\uFE4F  特殊标点(︴︵︶︷︸︹)
    //  \uFF00-\\uFFEF  日文  (オカキクケコサ)
    //  \u2000-\\u201f  特殊字符(‐‑‒–—―‖‗‘’‚‛“”„‟)
    // 注:对照表 http://blog.csdn.net/hherima/article/details/9045765
    NSRegularExpression* expression = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
    NSString* result = [expression stringByReplacingMatchesInString:self options:0 range:NSMakeRange(0, self.length) withTemplate:@""];
    return result;
}
/** *  判断字符串中是否包含非法字符 *
 @param content 需要判断的字符串 *
 @return Yes: 包含;No: 不包含 */
- (BOOL)hasIllegalCharacter:(NSString *)content;
/** *  判断字符串中是否包含非法字符 *
 @param content 需要判断的字符串 *
 @return Yes: 包含;No: 不包含 */
- (BOOL)hasIllegalCharacter:(NSString *)content{
    // 特殊字符
    NSString *str = @"[^%@#^*&¥'~=$<>`\x22]+";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", str];
    if (![emailTest evaluateWithObject:content]) {
        return YES;
    }
    return NO;
}


声明以下均为google搜索得来,经过修改用于项目中,用作记录,如侵,则删.


后续根本性问题解决:

让后台哥哥把类型改为utf8mb4。

引用链接,以上bug全解决

https://blog.csdn.net/samHuangLiang/article/details/80677844


相关文章
|
Swift iOS开发
iOS - Swift - NSAttributedString 显示Emoji乱码问题
iOS - Swift - NSAttributedString 显示Emoji乱码问题
iOS - Swift - NSAttributedString 显示Emoji乱码问题
|
编解码 iOS开发
iOS自定义的emoji表情键盘
iOS自定义的emoji表情键盘
393 0
iOS自定义的emoji表情键盘
|
Web App开发 关系型数据库 MySQL
|
存储 关系型数据库 MySQL
Emoji表情符号兼容方案(适用ios,android,wp等平台)
http://blog.csdn.net/qdkfriend/article/details/7576524   Emoji表情符号兼容方案 一 什么是Emoji          emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)  表情符号现已普遍应用于手机短信和网络聊天软件。
3858 0
|
27天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
4天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
85 66
|
14天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
18天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。