JavaScript计算字符串实际长度(含中英文)的三种实现方式
作者:半夏时间:2026-10-25 12:59:01浏览:354
本文介绍在JavaScript中计算包含中英文字符串实际长度的三种常用方法。通过charCodeAt判断Unicode编码范围、简化位运算判断,以及将中文替换为双字节英文字符后计算长度。其中第三种方法利用正则表达式替换,代码简洁且推荐使用。
在日常开发中,经常需要计算字符串的实际长度,特别是当字符串包含中文和英文混合内容时。这里总结几种常用的实现方案。
第一种方法:利用charCodeAt()判断字符编码
charCodeAt()方法用于返回指定位置字符的Unicode编码值,返回值范围通常在0到65535之间。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
* 获取字符串实际长度(包含中英文)
* @param str 要获得长度的字符串
*/
var zfc = {};
zfc.getStringLength = 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;
};
console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
</script>
</head>
<body>
</body>
</html>第二种方法:基于charCodeAt()的简化版实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
* 获取字符串实际长度(包含中英文)
* @param str 要获得长度的字符串
*/
var zfc = {};
zfc.getStringLength = function (str) {
var len = str.length;
var realLength = 0;
for (var i = 0; i < len; i++) {
if ((str.charCodeAt(i) & 0xff00) != 0) {
realLength++;
}
realLength++;
}
return realLength;
};
console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
</script>
</head>
<body>
</body>
</html>第三种方法:先将中文替换为两个英文字符,再计算长度(推荐使用)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
* 获取字符串实际长度(包含中英文)
* @param str 要获得长度的字符串
*/
var zfc = {};
zfc.getStringLength = function (str) {
return str.replace(/[\u0391-\uFFE5]/g, 'aa').length;
};
console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
</script>
</head>
<body>
</body>
</html>以上就是关于JavaScript获取字符串实际长度的几种实现方式,希望能对读者有所帮助。
作者最新文章
JavaScript闭包与类(Class)的区别及适用场景对比
2026-11-05 15:48:57
JavaScript入门要学ES6吗?let与箭头函数等新特性解析
2026-11-05 14:49:16
JavaScript 8种数据类型详解:基本类型与引用类型的区别
2026-11-05 14:25:15
怎么在JavaScript中使用async/await优化Ajax异步流程
2026-11-05 13:56:15
JavaScript replace回调函数实现动态正则替换逻辑
2026-11-05 13:52:13
