如何编写正则匹配仅含单个或多个emoji的纯emoji字符串?
正则表达式:匹配纯Emoji字符串
需要编写正则表达式,仅匹配完全由一个或多个Emoji组成、不含任何其他字符的字符串。此前相关方案无法支持全部Emoji,目前使用以下代码检测Emoji,但不知如何排除其他字符:
const regex = /\p{Extended_Pictographic}/ug; return regex.test(mystr);
测试用例及预期结果
- 不符合(预期返回
false):- 🌺🌸d🌸👩🏼❤️💋👩🏽f
- t
- 3
- 符合(预期返回
true):- 🌺🌸🌸👩🏼
- ❤️
- 💋
- 👳♂️
- 🏖
- 🖍
解决方案
要实现“完全匹配纯Emoji字符串”,需给正则加上字符串首尾锚定符,同时覆盖Emoji的组合特性(比如肤色修饰符、ZWJ连接符、变体选择符组成的复合序列)。修改后的正则如下:
const regex = /^[\p{Extended_Pictographic}\p{Emoji_Modifier}\p{Emoji_Component}\u200D\uFE0F]+$/u; return regex.test(mystr);
正则规则说明
^和$:锚定字符串首尾,确保整个内容都符合匹配规则,彻底排除含非Emoji字符的情况。\p{Extended_Pictographic}:匹配所有Unicode扩展象形字符,覆盖绝大多数基础Emoji。\p{Emoji_Modifier}:匹配Emoji肤色修饰符(如👩🏼中的🏼)。\p{Emoji_Component}:匹配Emoji组件字符(部分复合Emoji的组成部件)。\u200D:匹配零宽连接符ZWJ,支持由多个Emoji连接而成的复合序列(如👩🏼❤️💋👩🏽)。\uFE0F:匹配变体选择符,支持将普通字符转换为Emoji样式(如❤️中的FE0F)。+:确保字符串至少包含一个Emoji序列。
内容的提问来源于stack exchange,提问作者Vahid Amiri
相关产品推荐
相关产品推荐

