js获取String的实际长度

本文介绍了一种用于计算字符串实际长度的JavaScript函数,该函数能够准确地处理包括中文字符在内的各种字符集,对于网页开发及需要精确控制文本长度的应用场景非常有用。
<script>
var getStrSize = function(str) {
    var realLength = 0, len = str.length, charCode = -1;
    for (var i = 0; i < len; i++) {
        charCode = str.charCodeAt(i);
        if (charCode >= 0 && charCode <= 128) realLength += 1;
        else realLength += 2;
    }
    return realLength;
};
</script>


 

### JavaScript 中计算中文字符字节长度的方法 在 JavaScript 中,可以通过多种方法来计算字符串中的中文字符所占的字节长度。以下是几种常见的实现方式: #### 方法一:基于正则表达式的匹配 通过正则表达式可以识别出字符串中的非 ASCII 字符(通常包括中文),并将其视为占用多个字节的字符。 ```javascript function calculateByteLength(str) { let len = str.length; const matches = str.match(/[^\\x00-\\x80]/g); if (matches) { len += matches.length; // 每个非ASCII字符额外增加1个字节 } return len; } console.log(calculateByteLength("你好")); // 输出 4 ``` 这种方法假设每个非 ASCII 字符占据两个字节[^1]。 --- #### 方法二:逐字符遍历并统计字节数 通过对字符串逐一分析其 Unicode 编码范围,可以根据具体需求定义不同字符对应的字节数量。 ```javascript String.prototype.byteLength = function() { let len = 0; for (let i = 0; i < this.length; i++) { len += (this.charCodeAt(i) > 255 ? 3 : 1); // UTF-8 编码下,大于255的字符按3字节处理 } return len; }; console.log("你好世界".byteLength()); // 输出 12 ``` 此代码片段按照 UTF-8 的标准将每个超出基本拉丁字母表范围的字符计为三个字节[^2]。 --- #### 方法三:简化版双字节字符检测 如果只需要区分单字节与双字节字符,则可以用更简单的逻辑完成。 ```javascript function myLen(str) { let len = 0; for (let i = 0; i < str.length; i++) { len += (str.charCodeAt(i) >= 127 ? 2 : 1); // 非ASCII字符视作双字节 } return len; } console.log(myLen("abc你好")); // 输出 7 ``` 这里采用的是较为宽松的标准,即任何 `charCode` 值超过 127 的都被认为是双字节字符[^3]。 --- #### 方法四:另一种通用算法 还有一种更为简洁的方式可以直接扩展原生对象的功能。 ```javascript String.prototype.byteLen = function() { let len = 0, i = this.length; while (i--) { len += (this.charCodeAt(i) > 255 ? 2 : 1); } return len; }; console.log(("测试").byteLen()); // 返回 4 console.log(("aaa").byteLen()); // 返回 3 ``` 这段脚本同样适用于大部分场景下的简单应用案例[^4]。 --- 以上四种方案各有优劣,在实际开发过程中可根据项目具体情况选择最适合的一种或者组合使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值