检查给定字符是否是Objective-C中的表情符号

时间:2019-01-16 21:47:39

标签: ios objective-c unicode nsstring emoji

我有一个NSString,并且想检查某个索引处的给定字符是否是表情符号。

但是,似乎没有任何可靠的方式来创建NSCharacterSet表情符号字符,因为它们随着iOS更新而更新。而且许多可用的解决方案都依赖于UnicodeScalar等Swift功能。所有解决方案似乎都涉及对表情符号的代码点值进行硬编码。

这样,有可能根本检查表情符号吗?

1 个答案:

答案 0 :(得分:2)

这个问题有点复杂,因为Unicode很复杂,但是您可以使用NSRegularExpression来做到这一点:

    NSString *s = @"where's the emoji  ?";
    NSRegularExpression *r = [NSRegularExpression regularExpressionWithPattern:@"\\p{Emoji_Presentation}" options:0 error:NULL];
    NSRange range = [r rangeOfFirstMatchInString:s options:0 range:NSMakeRange(0, s.length)];
    NSLog(@"location %lu length %lu", (unsigned long)range.location, (unsigned long)range.length);

产生:

2019-01-16 18:07:42.629 emoji[50405:6837084] location 18 length 2

我正在使用\p{Unicode property name}模式来匹配具有指定Unicode属性的字符。我正在使用属性Emoji_Presentation来获取默认显示为表情符号的那些字符。您应该查看Unicode® Technical Standard #51 — Annex A: Emoji Properties and Data Files和A.1中链接的数据文件,以确定您真正关心的属性。