javascript - 如何计算 javascript 中带有表情符号的字符串的正确长度?

标签 javascript node.js emoji

我有个小问题。

我正在使用 NodeJS 作为后端。现在,用户有一个字段“传记”,用户可以在其中写一些关于他自己的东西。

假设这个字段有 220 个最大长度,并假设这是输入:

👶🏻👦🏻👧🏻👨🏻👩🏻👱🏻‍♀️👱🏻👴🏻👵🏻👲🏻👳🏻‍♀️👳🏻👮🏻‍♀️👮🏻👷🏻‍♀️👷🏻💂🏻‍♀️💂🏻🕵🏻‍♀️👩🏻‍⚕️👨🏻‍⚕️👩🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾👨🏻‍🌾 

如您所见,没有 220 个表情符号(有 37 个表情符号),但如果我在我的 nodejs 服务器中有

console.log(bio.length)

其中 bio 是输入文本,我得到 221。我如何“解析”字符串输入以获得正确的长度?是unicode的问题吗?

已解决

我使用了这个库:https://github.com/orling/grapheme-splitter

我试过了:

var Grapheme = require('grapheme-splitter');
var splitter = new Grapheme();
console.log(splitter.splitGraphemes(bio).length);

而且长度是37,效果很好!

最佳答案

  1. str.length 给出了 UTF-16 单元的计数。

  2. 以代码点(以字符为单位)获取字符串长度的 Unicode 证明方法是 [...str].length,因为可迭代协议(protocol)将字符串拆分为代码点。

  3. 如果我们需要字素(字素簇)中的长度,我们有这些 native 方法:

    一个。 RegExp 中的 Unicode 属性转义。参见示例:Unicode-aware version of \wMatching emoji .

    Intl.Segmenter ——即将推出,可能在 ES2021 中。可以在最新的 V8 版本中使用标志进行测试(实现与 V8 86 中的最新规范同步)。在 V8 87 中未标记(已发货)。

另见:

关于javascript - 如何计算 javascript 中带有表情符号的字符串的正确长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369513/

相关文章:

javascript - 在EventEmitter上,我如何知道我可以监听的所有事件?

node.js - Sequelize 方法提供未定义

node.js - 如何使用 SailsJS v0.11.3 在 MongoDB 中存储时间值?

python - Facebook/messenger 存档包含我无法解析的表情符号

javascript - 有没有办法在 android webview 应用程序中使用表情符号?

javascript - 是否可以替换数组中除一个字符串之外的所有字符串

javascript - knockout.js、knockout-sortable 和默认文本

javascript - 基于 JS/HTML5 Webkit 的移动开发的轻量级 UI 框架,具有良好的列表性能

javascript - 查看对象的隐藏属性

python - 在python3中找到一个字符串中有一个表情符号