判斷字符串是否含有emoij表情,(遍歷字符串),判斷Unicode

Emoji表情最終會被編碼成Unicode,因此,只要知道Emoji表情的Unicode編碼的范圍,就可以判斷用戶是否輸入了Emoji表情。以下是具體代碼,我這里寫成了NSString的一個分類

- (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;
                                            NSLog(@"%@",substring);
                                            [self changeToString:substring];
                                        }
                                    }
                                } 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;
}

這段代碼并非本人原創(chuàng),也是取自互聯(lián)網(wǎng),經(jīng)測試好使,分享給大家。
如果想改變emoij的大小,而不改變文字的大小,我試了一下,用屬性字符串就可以。如果有這樣的需求可以試下。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 在當前這個時代(比如說公元2016年),如果你并不是在維護歷史遺留的文本處理代碼,沒有在每個地方都使用Unicod...
    縱橫而樂閱讀 2,775評論 3 16
  • 轉載自ObjeC中國 歷史 計算機沒法直接處理文本,它只和數(shù)字打交道。為了在計算機里用數(shù)字表示文本,我們指定了一個...
    玉米包谷閱讀 1,235評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 開頭話: 一個大一狗、一個小筆頭。熱愛自然、熱愛文學(多種類,如小說、詩劇、傳記、散文)。由于空閑時間較多所以酷愛...
    摸得著的棱角閱讀 1,318評論 1 0
  • 國家運動員減肥指定產(chǎn)品--天杞園特膳 天杞園特膳(全稱是阿拉特膳美膳美姿即食谷物粉)本身是08年奧運會后專門為運動...
    卡迪娜6閱讀 473評論 0 0