javascript - 计算字符串的实际长度,就像我们使用插入符一样

标签 javascript string-length

我想要的是计算插入符从字符串的开头移动到结尾的时间。

解释:
看这个字符串 ""在这个 fiddle 中:http://jsfiddle.net/RFuQ3/
如果您将插入符放在第一个引号之前,然后按向右箭头 ,您将按 3 次以到达第二个引号之后(而不是空字符串 2 次)。

第一种也是最容易计算字符串长度的方法是<string>.length .
但在这里,它返回 2。

第二种方式,来自JavaScript Get real length of a string (without entities)也给出 2。

我怎样才能得到 1?


1-我想到了一种将字符串放入文本输入的方法,然后执行 whiletry{setCaret}catch(){} 循环
2-这只是为了好玩

最佳答案

你问题中的字符“₩”是 Unicode Character 'LANGUAGE TAG' (U+E0001) .

从以下 Stack Overflow 问题中,

我们了解到

JavaScript strings are UCS-2 encoded but can represent Unicode code points outside the Basic Multilingual Pane (U+0000-U+D7FF and U+E000-U+FFFF) using two 16 bit numbers (a UTF-16 surrogate pair), the first of which must be in the range U+D800-U+DFFF.

UTF-16 surrogate pair代表“₩”的是U+DB40U+DC01。十进制U+DB40是56128,U+DC01是56321。

console.log("󠀁".length); // 2
console.log("󠀁".charCodeAt(0)); // 56128
console.log("󠀁".charCodeAt(1)); // 56321
console.log("\uDB40\uDC01" === "󠀁"); // true
console.log(String.fromCharCode(0xDB40, 0xDC01) === "󠀁"); // true

改编来自 https://stackoverflow.com/a/4885062/788324 的代码,我们只需要计算代码点的数量即可得出正确答案:

var getNumCodePoints = function(str) {
    var numCodePoints = 0;
    for (var i = 0; i < str.length; i++) {
        var charCode = str.charCodeAt(i);
        if ((charCode & 0xF800) == 0xD800) {
            i++;
        }
        numCodePoints++;
    }
    return numCodePoints;
};

console.log(getNumCodePoints("󠀁")); // 1

jsFiddle Demo

关于javascript - 计算字符串的实际长度,就像我们使用插入符一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276497/

相关文章:

javascript - 在表单中放置多个提交按钮..点击提交后应该转到ajax中的特定URL

javascript - 我如何从上层范围访问变量 - javascript

javascript - 确定何时加载 IFrame 的内容

javascript - 过渡不适用于高度

batch-file - 在批处理脚本中,标签和标签后面出现的文本是否有记录的长度限制?

input - 读取未知长度的字符串

javascript - 元素无法位于 (x,y) : how to fix for a list of WebElements that need to be clicked one by one

java - 如何在Java中将数组长度设置为字符串的大小并从字符串中引入字符

Bash:查找传递的所有参数的长度

c - 如何让右列垂直对齐