在server不支持昵稱保存昵稱的時候,我們就要對表情符號進行過濾掉,不僅僅需要過濾掉系統(tǒng)的表情,還有輸入法的表情,簡單來說就是所有的表情
// 是否包含表情符號
+ (BOOL)isContainsTwoEmoji:(NSString *)string
{
? ? __block BOOL isEomji = NO;
? ? [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
? ? ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
? ? ? ? const unichar hs = [substring characterAtIndex:0];
? ? ? ? //? ? ? ? NSLog(@"hs++++++++%04x",hs);
? ? ? ? if (0xd800 <= hs && hs <= 0xdbff) {
? ? ? ? ? ? if (substring.length > 1) {
? ? ? ? ? ? ? ? const unichar ls = [substring characterAtIndex:1];
? ? ? ? ? ? ? ? const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
? ? ? ? ? ? ? ? if (0x1d000 <= uc && uc <= 0x1f77f)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //? ? ? ? ? ? ? ? NSLog(@"uc++++++++%04x",uc);
? ? ? ? ? ? }
? ? ? ? } else if (substring.length > 1) {
? ? ? ? ? ? const unichar ls = [substring characterAtIndex:1];
? ? ? ? ? ? if (ls == 0x20e3|| ls ==0xfe0f) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? }
? ? ? ? ? ? //? ? ? ? ? ? NSLog(@"ls++++++++%04x",ls);
? ? ? ? } else {
? ? ? ? ? ? if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? } else if (0x2B05 <= hs && hs <= 0x2b07) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? } else if (0x2934 <= hs && hs <= 0x2935) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? } else if (0x3297 <= hs && hs <= 0x3299) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs == 0x231a ) {
? ? ? ? ? ? ? ? isEomji = YES;
? ? ? ? ? ? }
? ? ? ? }
? ? }];
? ? return isEomji;
}
在輸入框的代理方法做如下判斷
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
? ? //不支持系統(tǒng)表情的輸入
? ? if ([NSString isContainsTwoEmoji:string]) {
? ? ? ? return NO;
? ? }
? ? return YES;
}