美文网首页
iOS13 限制输入表情,emoji

iOS13 限制输入表情,emoji

作者: d0u | 来源:发表于2020-04-29 14:28 被阅读0次

    项目有这个需求,网上找了很多,大部分表情都能限制,但是总有一些漏网之鱼,类似 ❤️这个.最后在github上找到了一个2016年作者写的,竟然能全部屏蔽掉,链接,这个里面好几个方法,我使用到的是判断字符串是否为emoji

    注意:方法和百度来的很类似,但里面实际有一些不一样的,可以试一下

    + (BOOL)stringContainsEmoji:(NSString *)string
    {
        // 过滤所有表情。returnValue为NO表示不含有表情,YES表示含有表情
        __block BOOL containsEmoji = NO;
        [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
            
            const unichar hs = [substring characterAtIndex:0];
            // surrogate pair
            
            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 <= 0x1f9c0)
                    {
                        containsEmoji = YES;
                    }
                }
            }
            else if (substring.length > 1)
            {
                const unichar ls = [substring characterAtIndex:1];
                if (ls == 0x20e3 ||
                    ls == 0xfe0f ||
                    ls == 0xd83c)
                {
                    containsEmoji = YES;
                }
            }
            else
            {
                // non surrogate
                if (0x2100 <= hs &&
                    hs <= 0x27ff)
                {
                    containsEmoji = YES;
                }
                else if (0x2B05 <= hs &&
                         hs <= 0x2b07)
                {
                    containsEmoji = YES;
                }
                else if (0x2934 <= hs &&
                         hs <= 0x2935)
                {
                    containsEmoji = YES;
                }
                else if (0x3297 <= hs &&
                         hs <= 0x3299)
                {
                    containsEmoji = YES;
                }
                else if (hs == 0xa9 ||
                         hs == 0xae ||
                         hs == 0x303d ||
                         hs == 0x3030 ||
                         hs == 0x2b55 ||
                         hs == 0x2b1c ||
                         hs == 0x2b1b ||
                         hs == 0x2b50)
                {
                    containsEmoji = YES;
                }
            }
            
            if (containsEmoji)
            {
                *stop = YES;
            }
        }];
        return containsEmoji;
    }
    

    这个判断下有个问题是九宫格输入法直接是不能输入内容的,所以还需要再判断一下是否为九宫格输入法,判断方法:

    +(BOOL)isNineKeyBoard:(NSString *)string
    {
        NSString *other = @"➋➌➍➎➏➐➑➒";
        int len = (int)string.length;
        for(int i=0;i<len;i++)
        {
            if(!([other rangeOfString:string].location != NSNotFound))
                return NO;
        }
        return YES;
    }
    

    相关文章

      网友评论

          本文标题:iOS13 限制输入表情,emoji

          本文链接:https://www.haomeiwen.com/subject/jxggwhtx.html