首页 > 解决方案 > 查找只有一个表情符号的字符串的函数

问题描述

如何检测到字符串仅包含一个表情符号?现在它返回 true,如果有的话。

我只希望它只包含一个表情符号而没有其他内容时它是真实的。

function hasOneEmoji(str) {
    const regEx = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/g;

    if (str.match(regEx)) {
        return true;
    }

    return false;
}

标签: javascript

解决方案


假设您的正则表达式正确匹配 emojis,然后只需^(?:...)$在您的文字周围添加,这样这是整个字符串中唯一允许的模式:

function hasOneEmoji(str) {
  return /^(?:(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*)$/.test(str);
}

console.log(hasOneEmoji(''));
console.log(hasOneEmoji('Hello'));
console.log(hasOneEmoji('Hello'));
console.log(hasOneEmoji(''));


推荐阅读