我遇到了计算 unicode 字符的问题。我需要计算组合的 unicode 字符总数。
以这个 Angular 色为例:
द्ध
如果您在此字符串上使用 .length
属性,它会为您提供 3。这在技术上是正确的,因为它是以下内容的组合
द
、्
和 ध
但是,将 द्ध
放在文本区域中,然后您可以使用箭头键意识到它被视为一个字符。只有当您使用退格键时,您才会意识到有 3 个字符。
编辑:对于您的测试用例,请考虑它可能是一个词。它可能是这样的,
द्धद्द
这应该给 2 和 .length
,但是给 6
当您想获取或设置输入元素中的当前插入符位置时,这是一个问题。
您的示例“द्ध”是一个包含三个 Unicode 字符的字符串,length
属性正确地表明了这一点。
您显然要计算的是某种其他意义上的“字符”,例如“说一种语言的人直觉上认为是一个字符”。这是一个模糊且易变的概念。 Unicode 标准附件 UAX #29 Unicode Text Segmentation试图分析这个概念,称它为“字素簇”,并描述了一些使用它的算法。
不幸的是,JavaScript 没有内置工具来识别一个字符是否是,例如结合 mark 和 this 应该算是一个集群的一部分。但是,如果您可以限制自己只处理一种书写系统,您可能可以手动编写操作代码,通过代码编号引用可能的 Unicode 字符。
此外,如果目的是使计数与某些输入编辑器的工作方式相匹配(例如,箭头键如何超过字符),您需要了解该编辑器的逻辑。它可能在某种意义上或其他方面实现了 Unicode 字素簇。