Проверка, является ли данный персонаж эмодзи в Objective-C - PullRequest
0 голосов
/ 17 января 2019

У меня есть NSString и я хотел бы проверить, является ли данный символ по определенному индексу эмодзи.

Однако, похоже, не существует надежного способа создания NSCharacterSetсимволов эмодзи, так как они меняются с iOS обновления на обновление.И многие из доступных решений опираются на функции Swift, такие как UnicodeScalar.Кажется, что все решения включают жесткое кодирование значений кодов для эмодзи.

Можно ли вообще проверять эмоджи?

1 Ответ

0 голосов
/ 17 января 2019

Это немного сложный вопрос, потому что 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® № 51 - Приложение A: Свойства Emoji и файлы данных и файлы данных, связанные в A.1, чтобы решить, какое свойство вам действительно нужно.

...