iOS 5.0 如何检查一个 NSString 是否包含 Emoji 字符

5
我有一个iOS 5应用程序,允许用户使用国际键盘输入用户名。我想检查输入的(NSString *)是否包含表情符号字符。
禁用表情符号键盘不是一个选项(UIKeyboardTypeASCIICapable会禁用一些国际键盘)。
我尝试了this。但它无法检测到一些字符,如these
有没有好的方法来解决这个问题?
4个回答

10

这不是正确的。这个解决方案无法处理苹果解释为表情符号但实际上在表情符号被创建和索引到Unicode之前就已经存在的Unicode字符。例如,在表情符号键盘上的第5个表情符号(在Unicode中一直存在,直到苹果将其更改为表情符号)--> ☺ <-- 在iPhone上呈现为表情符号。 - Albert Renshaw

1
使用https://github.com/woxtu/NSString-RemoveEmoji类别,但请注意iOS 9.1添加了更多的表情符号,上述方法无法识别(尤其是这些:)。修正方法:将isEmoji方法中的return (0x1d000 <= codepoint && codepoint <= 0x1f77f);替换为return (0x1d000 <= codepoint && codepoint <= 0x1f77f) || (0x1F900 <= codepoint && codepoint <=0x1f9ff);。保留HTML标签。

这仍然允许某些字符,例如☺️,请添加以下内容:(0x2100 <= codepoint && codepoint <= 0x26ff) - Leon

0

对于 iOS 10 及以下版本,您应该检查 Unicode 是否在以下值之间。

if ((0x1d000 <= uc && uc <= 0x1f77f) || (0x1f900 <= 0x1f9ff)) {
     //is emoji
}

-1
NSData *data = [yourstringofemo dataUsingEncoding:NSNonLossyASCIIStringEncoding];

NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];


if ([goodValue rangeOfString:@"\u"].location == NSNotFound) 
{
      goodvalue string contains emoji characters
} 
else
{
      goodvalue string does not contain emoji characters
}

1
这将过滤掉非表情符号字符,例如“ı”。 - CÇ.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接