javascript - 查找只有一个表情符号的字符串的函数
问题描述
如何检测到字符串仅包含一个表情符号?现在它返回 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;
}
解决方案
假设您的正则表达式正确匹配 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(''));
推荐阅读
- angular - 如何使用角度在放置请求中发送图像
- arcgis - arcgis goTo 功能并打开弹出窗口
- redhat - RHEL 8.4 - 无法安装 httpd
- keras - Keras Hypermodel - 使用默认参数构建
- visual-studio - 使用 xamarin 表单 c# 自定义底部导航
- php - 使用 php-fpm 在本地开发环境中记录传出请求
- python - 如何解决在 pytest 中找不到夹具的问题?
- node.js - find().session(session) 的 Mongoose 事务给出 IllegalOperation 错误
- go - 固定数量工人模式的竞争条件
- c++ - 在共享库中隐藏派生类的符号