我有个小问题。
我正在使用 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,效果很好!
最佳答案
str.length
给出了 UTF-16 单元的计数。以代码点(以字符为单位)获取字符串长度的 Unicode 证明方法是
[...str].length
,因为可迭代协议(protocol)将字符串拆分为代码点。如果我们需要字素(字素簇)中的长度,我们有这些 native 方法:
一个。 RegExp 中的 Unicode 属性转义。参见示例:Unicode-aware version of \w或 Matching emoji .
Intl.Segmenter ——即将推出,可能在 ES2021 中。可以在最新的 V8 版本中使用标志进行测试(实现与 V8 86 中的最新规范同步)。在 V8 87 中未标记(已发货)。
另见:
关于javascript - 如何计算 javascript 中带有表情符号的字符串的正确长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369513/