Skip to content

Instantly share code, notes, and snippets.

@cihancimen
Created November 26, 2012 00:54
Show Gist options
  • Select an option

  • Save cihancimen/4146056 to your computer and use it in GitHub Desktop.

Select an option

Save cihancimen/4146056 to your computer and use it in GitHub Desktop.
Check if an NSString contains an emoji character
- (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];
// surrogate pair
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 {
// non surrogate
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;
}
@mi-Fei
Copy link
Copy Markdown

mi-Fei commented Dec 1, 2016

I found the solution, just convert the string first
unichar unicodevalue = [text characterAtIndex:0];
NSString *str = [NSString stringWithCharacters:&unicodevalue length:1];
then use this str to judge

@TimorYang
Copy link
Copy Markdown

The U+d83e u Not included

@steve7688
Copy link
Copy Markdown

there are some new emojis added in iOS 16.Looks like this code need to be update

@szmichaelyb
Copy link
Copy Markdown

搜狗输入法的一些 emoji 表情,没有包含~

@Wtclrsnd
Copy link
Copy Markdown

for 2025 codepoint (uc) should be in range 0xF000...0x1FAFF

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment