我有一个NSString
,并且想检查某个索引处的给定字符是否是表情符号。
但是,似乎没有任何可靠的方式来创建NSCharacterSet
表情符号字符,因为它们随着iOS更新而更新。而且许多可用的解决方案都依赖于UnicodeScalar
等Swift功能。所有解决方案似乎都涉及对表情符号的代码点值进行硬编码。
这样,有可能根本检查表情符号吗?
答案 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中链接的数据文件,以确定您真正关心的属性。