最新消息:发现真没时间折腾VPS,最近又换了个空间。呵呵

JavaScript的字符串长度问题的解决方法

JavaScript对于常用的文字长度是没有问题的,每个字符的长度都为1。
那什么是常用文字呢?用Unicode的表示方法来说就是文字的Unicode编码在0x0000到0xFFFF(65535)之间的字符。
对于Unicode编码大于0xFFFF(65535)的字符,用JavaScript取得的长度是2。比如对于“”这个字符取得的长度就是2:

JavaScript
console.log('1'.length); // 1
console.log('中'.length); // 1

console.log('𠀋'.length); // U+2000B, 2

为什么呢?原来JavaScript对于Unicode为0x10000到0x10FFFF之间的字符都是用两个字符来表示的。这两个字符的编码区间为0xD800到0xDFFF。这样的话,我们可以对字符串对象追加一个函数,比如charCount;也可以追加一个自己的函数,用于计算字符串的真正长度。其代码如下:

JavaScript
// 添加到字符串属性,可以用点来调用
String.prototype.charCount = function() {
    var charcount = this.length;
    // 查找字符编码为0xd800到0xdfff之间的字符,有的话,长度减一
    for (var i = 0; i < this.length; ++i) {
        var code = this.charCodeAt(i);
        if (code >= 0xd800 && code <= 0xdfff) {
            --charcount;
            ++i;
        }
    }
    return charcount;
}
// 测试
console.log('1'.charCount());
console.log('中'.charCount());
console.log('&#x2000b;'.charCount());

// 自定义函数,不可以用点来调用,不过对系统影响少
function charCount(str) {
    var charcount = str.length;
    // 查找字符编码为0xd800到0xdfff之间的字符,有的话,长度减一
    for (var i = 0; i < str.length; ++i) {
        var code = str.charCodeAt(i);
        if (code >= 0xd800 && code <= 0xdfff) {
            --charcount;
            ++i;
        }
    }
    return charcount;
}
// 测试
console.log(charCount('1'));
console.log(charCount('中'));
console.log(charCount('&#x2000b;'));

转载请注明:宇托的狗窝 » JavaScript的字符串长度问题的解决方法

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址