我有一个 iOS 5 应用程序,允许用户使用国际键盘输入用户名。我想检查输入(NSString *)是否包含表情符号字符。
禁用表情符号键盘不是一个选项(使用 UIKeyboardTypeASCIICapable 因为它禁用了一些国际键盘)。
有没有解决这个问题的好方法?
我能够使用以下方法检测 iOS 5 和 iOS 6 表情符号键盘中的所有表情符号 https://gist.github.com/4146056
使用https://github.com/woxtu/NSString-RemoveEmoji类别,但请注意 iOS 9.1 添加了更多上述方法无法识别的表情符号(尤其是这些:)。
FIX:
return (0x1d000 <= codepoint && codepoint <= 0x1f77f);
在isEmoji
方法中替换为
return (0x1d000 <= codepoint && codepoint <= 0x1f77f) || (0x1F900 <= codepoint && codepoint <=0x1f9ff);
对于 iOS 10 及更低版本,您应该检查 unicode 是否在以下值之间。
if ((0x1d000 <= uc && uc <= 0x1f77f) || (0x1f900 <= 0x1f9ff)) {
//is emoji
}
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
}