在開發(fā)中我們有時候會遇到一些需求 唯卖,比如就是我們接下來要談的內(nèi)容 就是輸入框內(nèi)禁止輸入Emoji表情,那么我可以用如下方法來實(shí)現(xiàn)躬柬,
// 是否包含emoji
-(BOOL)stringContainsEmoji:(NSString*)string
{
? ? __blockBOOLreturnValue =NO;
?? ?[stringenumerateSubstringsInRange:NSMakeRange(0, [string length])
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSStringEnumerationByComposedCharacterSequences
? ? ? ? ? ? ? ? ? ? ? ? ? ? usingBlock:^(NSString*substring,NSRangesubstringRange,NSRangeenclosingRange,BOOL*stop) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? constunicharhigh = [substringcharacterAtIndex:0];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Surrogate pair (U+1D000-1F9FF)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0xD800<= high && high <=0xDBFF) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? constunicharlow = [substringcharacterAtIndex:1];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? constintcodepoint = ((high -0xD800) *0x400) + (low -0xDC00) +0x10000;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0x1D000<= codepoint && codepoint <=0x1F9FF){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Not surrogate pair (U+2100-27BF)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0x2100<= high && high <=0x27BF){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? }];
? ? returnreturnValue;
}
然后測試完全過濾掉了我們平常通用的Emoji表情拜轨,但是你會發(fā)現(xiàn)一個問題,當(dāng)你的鍵盤切換到中文的九宮格的時候允青,鍵盤會卡主 無法輸入 無法選擇要輸入的字橄碾,當(dāng)你debug的時候 你會發(fā)現(xiàn) 點(diǎn)擊的九宮格變成了?? … ?中模樣,這顯然也是emoji表情呀,所以我們還需要顧慮這些特殊字符
在代碼中加上這句判斷堪嫂,就可以完美解決問題了偎箫!
關(guān)于判斷一字符串是否包含 Emoji 表情的方法,一般是通過 Unicode 編碼范圍來判斷 皆串,詳見這里:判別Emoji表情
方法名是這個:- (BOOL)stringContainsEmoji:(NSString *)string;