如何让键盘禁止输入Emoji 表情,以及九宫格键盘的坑
在开发中我们有时候会遇到一些需求 ,比如就是我们接下来要谈的内容 就是输入框内禁止输入Emoji表情,那么我可以用如下方法来实现,
// 是否包含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表情,但是你会发现一个问题,当你的键盘切换到中文的九宫格的时候,键盘会卡主 无法输入 无法选择要输入的字,当你debug的时候 你会发现 点击的九宫格变成了➋➌ … ➒中模样,这显然也是emoji表情呀,所以我们还需要顾虑这些特殊字符
在代码中加上这句判断,就可以完美解决问题了!
关于判断一字符串是否包含 Emoji 表情的方法,一般是通过 Unicode 编码范围来判断 ,详见这里:判别Emoji表情
方法名是这个:- (BOOL)stringContainsEmoji:(NSString *)string;