You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中使用Dart检测字符串中的表情符号?

判断字符串中是否包含表情符号(正则实现方案)

嘿,这个需求我经常碰到,用正则表达式确实是最直接高效的办法。表情符号本质上是Unicode字符集中的特定区块,我们只需要把这些区块的范围整合到正则里,就能精准匹配啦。

核心思路:表情符号的Unicode范围

常见表情符号主要分布在这些Unicode区块里:

  • U+1F600 到 U+1F64F:普通表情(Emoticons)
  • U+1F300 到 U+1F5FF:杂项符号和象形图
  • U+1F680 到 U+1F6FF:交通和地图符号
  • U+1F900 到 U+1F9FF:补充符号和象形图
  • U+1FA00 到 U+1FAFF:符号和象形图扩展系列
  • U+1F3FB 到 U+1F3FF:肤色修饰符(跟在主表情后的组合符号)

正则表达式实现

整合以上范围后,我们可以写出覆盖绝大多数常见表情的正则:

[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F900}-\u{1F9FF}\u{1FA00}-\u{1FAFF}\u{1F3FB}-\u{1F3FF}]

注意:不同编程语言对Unicode转义的写法略有差异,比如Java 9+支持\u{xxxxxx}格式,Python支持\U000xxxxx或\u{xxxxxx}格式。

代码示例

Python 实现

import re

def has_emoji(text):
    # 编译正则表达式
    emoji_pattern = re.compile(
        r'[\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF\U0001F900-\U0001F9FF\U0001FA00-\U0001FAFF\U0001F3FB-\U0001F3FF]',
        flags=re.UNICODE
    )
    # 检查是否匹配到表情
    return bool(emoji_pattern.search(text))

# 测试用例
print(has_emoji("今天天气真好 😊"))  # 输出 True
print(has_emoji("纯文本测试内容"))    # 输出 False

Java 实现(Java 9+)

import java.util.regex.Pattern;

public class EmojiChecker {
    private static final Pattern EMOJI_PATTERN = Pattern.compile(
        "[\\u{1F600}-\\u{1F64F}\\u{1F300}-\\u{1F5FF}\\u{1F680}-\\u{1F6FF}\\u{1F900}-\\u{1F9FF}\\u{1FA00}-\\u{1FAFF}\\u{1F3FB}-\\u{1F3FF}]"
    );

    public static boolean hasEmoji(String text) {
        return EMOJI_PATTERN.matcher(text).find();
    }

    public static void main(String[] args) {
        System.out.println(hasEmoji("Hello 👋 World")); // 输出 true
        System.out.println(hasEmoji("Just plain text")); // 输出 false
    }
}

补充说明

如果需要覆盖更多类似表情的符号(比如☺️、❤️这类旧版符号),可以把U+2600到U+26FF(杂项符号)、U+2700到U+27BF(Dingbats符号)的范围加入正则。另外,对于👨‍👩‍👧这类多字符组合的复杂表情,上面的正则无法完全匹配,若需要处理这类场景,可能需要额外的组合序列匹配逻辑,但绝大多数日常需求用基础正则就足够了。

内容的提问来源于stack exchange,提问作者Remo Bajwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:37:54