判断字符串是否含有emoji表情或者颜文字(非键盘可输入的特殊字符)

判断字符串是否含有emoji表情或者颜文字(非键盘可输入的特殊字符)

最近遇到一个特别有意思的自动化测试小姐姐,测试类似备注之类的字段,要求允许输入中文、英文、中文符号、英文符号、数字。但是不允许输入表情包和颜文字,说是颜文字,其实主要也是针对键盘无法输入的特殊符号进行过滤。

查看资料,无意中发现Pattern.find方法很适合这个校验,所以记录下,这个有趣又合理的需求。

写了一个小test,代码如下:
下面展示一些 内联代码片

    public static void filterEmoji(String input) {
        if(input != null) {
            Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]|" +
                            "[\ud83e\udd00-\ud83e\uddff]|[\u2300-\u23ff]|[\u2500-\u25ff]|[\u2100-\u21ff]|[\u00a0-\u0fff]|[\u2b00-\u2bff]|[\u2d06]|[\u3030]"
                    ,Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE ) ;
            Matcher emojiMatcher = emoji.matcher(input);
            if (emojiMatcher.find()) {
                System.out.println("输入字符串:"+input+"   含有表情包"+emojiMatcher.group());
            }
        }
    }

然后用英文字符,中文字符,空格等测试一下

        filterEmoji("!@#¥%……&*()——+-={}【】|、:“《》?、。,‘");//中文特殊字符
        filterEmoji("!@#$%^&*()_+-={}[]\\|:\"<>?/.,'");//英文特殊字符
        filterEmoji("\uD83E\uDD26\u200D♀️q(≧▽≦q)");
        filterEmoji("\uD83E\uDD26\u200D♀");
        filterEmoji("q(≧▽≦q)");
        filterEmoji("我的CGCH@#¥&@#$%^%^&*()123456");
        filterEmoji("    ");

测试结果如下:
在这里插入图片描述
我尊敬的同事,嫌弃find方法,希望能有直接可以允许输入英文、中文、英文字符、中文字符和数字的正则,确实,我也不是很了解,只能用最笨蛋的拼接方法给他写了一个,如果大家有好方法欢迎留言。

        public static void matches(String input) {
        boolean isValid = input.matches("^[\\uff01\\u0040\\u0023\\uffe5\\u0025\\u2026\\u2026\\u0026\\u002a\\uff08\\uff09\\u2014\\u2014\\u002b\\u002d\\u003d\\u007b\\u007d\\u3010\\u3011\\u007c\\u3001\\uff1a\\u201c\\u300a\\u300b\\uff1f\\u3001\\u3002\\uff0c\\u2018\\u0021\\u0040\\u0023\\u0024\\u0025\\u005e\\u0026\\u002a\\u0028\\u0029\\u005f\\u002b\\u002d\\u003d\\u007b\\u007d\\u005b\\u005d\\u005c\\u007c\\u003a\\u0022\\u003c\\u003e\\u003f\\u002f\\u002e\\u002c\\u0027\\u4E00-\\u9FFFa-zA-Z0-9\\s\\p{P}]+$");
        if (isValid) {
            System.out.println("输入符合校验规则");
        } else {
            System.out.println("输入不符合校验规则");
        }
    } 

然后测试一下:

        String input1="!@#¥%……&*()——+-={}【】|、:“《》?、。,‘";//中文特殊字符
        String input2="!@#$%^&*()_+-={}[]\\|:\"<>?/.,'";//英文特殊字符
        String input3="\uD83E\uDD26\u200D♀️q(≧▽≦q)";
        String input4="\uD83E\uDD26\u200D♀";
        String input5="q(≧▽≦q)";
        String input6="我的CGCH@#¥&@#$%^%^&*()123456";//中文、英文、中文特殊字符、英文特殊字符、数字
        String input7="    ";
        matches(input1);
        matches(input2);
        matches(input3);
        matches(input4);
        matches(input5);
        matches(input6);
        matches(input7);

测试结果如下:
在这里插入图片描述
如果大家有好方法欢迎留言!如果大家有好方法欢迎留言!如果大家有好方法欢迎留言!
重要的事情说三遍!!!
加油!愿我们都要美好的未来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值