【问题标题】:Checking if a given character is an emoji in Objective-C在 Objective-C 中检查给定字符是否是表情符号
【发布时间】:2019-06-11 01:27:32
【问题描述】:
我有一个NSString,想检查某个索引处的给定字符是否是表情符号。
但是,似乎没有任何可靠的方法可以创建 NSCharacterSet 的表情符号字符,因为它们会随着 iOS 更新而变化。许多可用的解决方案都依赖于 Swift 功能,例如 UnicodeScalar。所有解决方案似乎都涉及对表情符号的代码点值进行硬编码。
因此,是否可以检查表情符号?
【问题讨论】:
标签:
ios
objective-c
unicode
nsstring
emoji
【解决方案1】:
这是一个有点复杂的问题,因为 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 中链接的数据文件,以确定您真正关心的属性。