JavaScript计算字符串实际长度(含汉字)的三种实现方式

作者:异步漫步时间:2026-10-30 12:06:17浏览:382

本文介绍了在JavaScript中获取包含汉字字符串实际长度的三种方法。通过遍历字符编码判断中英文,利用位运算优化判断逻辑,以及使用正则表达式替换后计算长度。这些方法能有效区分中文占两个字节、英文占一个字节的编码差异,适用于需要精确计算存储或显示长度的场景。

基于Unicode编码遍历的计算方法

第一种方法通过遍历字符串的每个字符,利用charCodeAt获取其Unicode编码值。若编码值在0到128之间,视为英文字符,长度加1;否则视为中文字符,长度加2。该方法逻辑直观,适用于大多数常规场景。


var jmz = {};
jmz.GetLength = function(str) {
  ///<summary>获得字符串实际长度,中文2,英文1</summary>
  ///<param name="str">要获得长度的字符串</param>
  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;
};

alert(jmz.GetLength('测试测试ceshiceshi));

利用位运算优化的长度计算

第二种方法在遍历过程中采用位运算进行判断。通过检查字符编码与0xff00进行按位与操作的结果是否非零,来区分中英文字符。这种方式在代码执行效率上略有提升,同时保持了逻辑的简洁性。


var l = str.length;
var blen = 0;
for(i=0; i<l; i++) {
if ((str.charCodeAt(i) & 0xff00) != 0) {
blen ++;
}
blen ++;
}

正则表达式替换后的长度获取

第三种方法利用正则表达式进行批量替换。将符合特定Unicode范围(如\u0391至\uFFE5)的中文字符替换为两个英文字符“aa”,然后直接获取替换后字符串的长度。这种方法代码最为简短,适合快速实现长度计算需求。


var jmz = {};
jmz.GetLength = function(str) {
  return str.replace(/[\u0391-\uFFE5]/g,"aa").length;  //先把中文替换成两个字节的英文,在计算长度
};  
alert(jmz.GetLength('测试测试ceshiceshi'));

以上介绍了三种在JavaScript中计算包含汉字字符串实际长度的方法,分别侧重于逻辑直观、执行效率和代码简洁性。开发者可根据具体项目需求选择合适的方式,以确保字符串长度计算的准确性。

作者最新文章