专栏首页正则object-c emoji
原创

object-c emoji

不支持输入系统表情符号

[[[textView textInputMode] primaryLanguage] isEqualToString:@"emoji"]

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

//不支持系统表情的输入

if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"emoji"]) {

return NO;

    }

return YES;

}

//过滤表情

+ (NSString *)filterEmoji:(NSString *)string {

    NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

const char *utf8 = [string UTF8String];

char *newUTF8 = malloc( sizeof(char) * len );

int j = 0;

//0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4)

for ( int i = 0; i < len; i++ ) { 

unsigned int c = utf8;

        BOOL isControlChar = NO;

if ( c == 4294967280 ||

            c == 4294967089 ||

            c == 4294967090 ||

            c == 4294967091 ||

            c == 4294967092 ||

            c == 4294967093 ||

            c == 4294967094 ||

            c == 4294967095 ||

            c == 4294967096 ||

            c == 4294967097 ||

            c == 4294967088 ) {

            i = i + 3;

            isControlChar = YES;

        }

if ( c == 4294967266 || c == 4294967267 ) {

            i = i + 2;

            isControlChar = YES;

        }

if ( c == 4294967234 ) {

            i = i + 1;

            isControlChar = YES;

        }

if ( !isControlChar ) {

            newUTF8[j] = utf8;

            j++;

        }

    }

    newUTF8[j] = '\0';

    NSString *encrypted = [NSString stringWithCString:(const char*)newUTF8

                                             encoding:NSUTF8StringEncoding];

free( newUTF8 );

return encrypted;

}

//是否含有表情

+ (BOOL)stringContainsEmoji:(NSString *)string

{

    __block BOOL returnValue = NO;

    [string enumerateSubstringsInRange:NSMakeRange(0, [string length])

                               options:NSStringEnumerationByComposedCharacterSequences

                            usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

const unichar hs = [substring characterAtIndex:0];

if (0xd800 <= hs && hs <= 0xdbff) {

if (substring.length > 1) {

const unichar ls = [substring characterAtIndex:1];

const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;

if (0x1d000 <= uc && uc <= 0x1f77f) {

                                            returnValue = YES;

                                        }

                                    }

                                } else if (substring.length > 1) {

const unichar ls = [substring characterAtIndex:1];

if (ls == 0x20e3) {

                                        returnValue = YES;

                                    }

                                } else {

if (0x2100 <= hs && hs <= 0x27ff) {

                                        returnValue = YES;

                                    } else if (0x2B05 <= hs && hs <= 0x2b07) {

                                        returnValue = YES;

                                    } else if (0x2934 <= hs && hs <= 0x2935) {

                                        returnValue = YES;

                                    } else if (0x3297 <= hs && hs <= 0x3299) {

                                        returnValue = YES;

                                    } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {

                                        returnValue = YES;

                                    }

                                }

                            }];

return returnValue;

}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Emojify_v2a

    Welcome to the second assignment of Week 2. You are going to use word vector rep...

    列夫托尔斯昊
  • Windows Terminal安装及美化

    Windows Terminal是微软出品的新版终端,可扩展性超高,用户可以很大程度的DIY终端外观,比旧版Cmd这个小黑框更好看也更强大。

    Naraku
  • JavaScript emoji utils

    也就是说,Unicode支持的编码范围是U+0000到U+10FFFF,能对应100多万个符号(0x10FFFF === 1114111)。这些符号被分组归入1...

    ayqy贾杰
  • PHPExcel写入单元格的数据为空,但是数据源有值【php】

    $objActive->setCellValue("A1", "content") 根据传入内容自动判断单元格内容类型

    sinnoo
  • 和Emoji相关的那些开源项目

    image.png Emoji 本名叫絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是字符。Emoji本是一套起源于日本的12x12像素表情...

    BestSDK
  • 特殊Emoji编码的介绍

    Emoji字符是Unicode字符集中一部分,特定形象的Emoji表情符号对应到特定的Unicode字节。随着Emoji涉及的范围越来越广泛,单Unicode这...

    用户5521279
  • 推荐!!! Markdown图标索引网站

    我们在观察别人的文章时候时,总能看到很多有趣的图标,像是这样 ??又或是???这样 。当我们复制图标时发现直接ctrl+c ctrl+v就可以,这竟然不是图片,...

    happlyfox
  • 禁止/移除 WordPress 4.2 中前台自动加载的 emjo 脚本

    如果你更新了WordPress 最新版本的4.2 版本,查看网页源代码你会发现WordPress 会自动在head加载一段用于支持emjo 表情的脚本(JS+C...

    Jeff
  • Hexo 中使用 emoji 和 tasks

    今天在迁移博客项目的时候,发现原来在 hugo 中可以使用的 Emoji 和 tasks 功能都不能正常使用了,查询了一下原因,主要是因为 hexo 默认的解析...

    zucchiniy
  • Foundation-String

    最近写完了Swift 3.0教程 ,在接下来这段时间,继续写Foundation 的教程,帮助大家更加深入,系统的学习Foundation 框架,可能会持续一段...

    酷走天涯
  • 5个emoji表情包,让你秒懂哈希函数!

    事实上,如果你理解哈希函数,那么理解区块链的挖矿模式和不可篡改性便是一件轻而易举的事情!

    区块链大本营
  • 世界上最好玩的6种表情符号编程语言

    谁能想到我们最喜欢的表情符号可以用来设计新的编程语言?聪明有才华的人已经想象并开发出了成熟的编程语言,我们可以用它来编写表情符号和表情符号。

    艾小仙
  • 序列模型第二周作业2:Emojify!

    在读取data/glove.6B.50d.txt你可能会遇到这样一个问题: 'gbk' codec can't decode byte 0x93 in pos...

    Steve Wang
  • d.ts

    经常看到d.ts,因为一个越来越广泛的应用场景是编辑器智能提示(具体见IntelliSense based on TypeScript Declaration ...

    ayqy贾杰
  • 从零开始构建自己的react组件库

    整合normalize.css到 src/styles/_reboot.scss中

    lilugirl
  • New UWP Community Toolkit - Markdown

    概述 前面 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 MarkdownTex...

    Shao Meng
  • Object-C特性埋点

    Objective-C是一门简单的语言,95%是C。只是在语言层面上加了些关键字和语法。真正让Objective-C如此强大的是它的运行时。它很小但却很强大。它...

    Kris大鲨
  • The C++ Object and Memory Model

    More documentation:Memory Model and Default Constructor Construction.

    查利鹏
  • Emoji 简介

    一、含义 Emoji 是可以插入文字的图形符号。 ? 它是一个日语词,e表示"絵",moji表示"文字"。连在一起,就是"絵文字"。 Emoji 在上个世纪...

    ruanyf

扫码关注云+社区

领取腾讯云代金券