我有点问题。
我正在使用 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,效果很好!
原文由 Stackedo 发布,翻译遵循 CC BY-SA 4.0 许可协议
str.length
给出 UTF-16 单元的计数。以代码点(以字符为单位)获取字符串长度的 Unicode 证明方法是
[...str].length
因为可迭代协议将字符串拆分为代码点。如果我们需要字素(字素簇)的长度,我们有这些本机方法:
一个。 RegExp 中的 Unicode 属性转义。参见示例: Unicode-aware version of \w 或 Matching emoji 。
也可以看看:
每个软件开发人员绝对、绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!)
每个 JavaScript 开发人员都应该了解的有关 Unicode 的知识
JavaScript 存在 Unicode 问题
ES2015 中支持 Unicode 的正则表达式
深入了解 ES6 字符串(和 Unicode,❤)
为没有耐心的程序员准备的 JavaScript。 Unicode——简介