背景
- 在项目中会出现用户需要在内容中输入Emoji表情、在详情中回显输入的Emoji表情的需求
- 数据库无法直接存储Emoji表情
实现
网上通过js来实现表情转换的帖子,但是我实际使用后发现,总会有问题(要不就是个别转换失败,要不就是表情更新后转换功能失效)
所以我建议还是使用第三方库来实现表情的转换
安装插件
npm i emoji-regex
封装函数
import emojiRegex from 'emoji-regex';
// 1. 检测字符串是否包含emoji表情
export function containsEmoji(text) {
const regex = emojiRegex();
return regex.test(text);
}
// 2. 将emoji表情转换为字符串表示
export function convertEmojiToString(text) {
const regex = emojiRegex();
return text.replace(regex, (emoji) => `:emoji_${emoji.codePointAt(0).toString(16)}:`);
}
// 3. 判断字符串中是否包含已转换成string的emoji表情字符
export function containsConvertedEmojiString(text) {
const convertedEmojiRegex = /:emoji_[a-f0-9]+:/g;
return convertedEmojiRegex.test(text);
}
// 4. 将字符串中已转换成string的emoji表情字符转换回表情
export function convertStringToEmoji(text) {
return text.replace(/:emoji_([a-f0-9]+):/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)));
}
四个函数功能:
- 函数1:检测内容中是否包含Emoji表情
- 函数2:将包含Emoji表情的内容中的Emoji表情转换成数据库可存储的str
- 函数3:判断内容中是否包含被转换后的Emoji表情str
- 函数4:将内容中被转换后的Emoji表情str重新转换回Emoji表情