javascript 正确截取单字节和双字节混和字符串的方法

本文介绍了如何在JavaScript中正确截取包含单字节和双字节字符的字符串,通过计算不同字符占用的字节数来实现精确截取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript">
/*************************************************************
Description : 正确截取单字节和双字节混和字符串
String str : 要截取的字符串
Number : 截取长度
*************************************************************/
functionsubstr(str, len)
{
if(!str || !len) {return ''; }
//预期计数:中文2字节,英文1字节
vara = 0;
//循环计数
vari = 0;
//临时字串
vartemp = '';
for(i=0;i<str.length;i++)
{
if(str.charCodeAt(i)>255)
{
//按照预期计数增加2
a+=2;
}
else
{
a++;
}
//如果增加计数后长度大于限定长度,就直接返回临时字符串
if(a > len) {return temp; }
//将当前内容加到临时字符串
temp += str.charAt(i);
}
//如果全部是单字节字符,就直接返回源字符串
returnstr;
}
varstr = "呵呵he哈哈嘿嘿and";
document.write("字符串:<font color='red'>"+str+"</font><br /><br />");
document.write("javascript 默认截取10个字节的返回值:<br />");
document.write("<font color='red'>"+str.substr(0, 10)+"</font><br /><br />");
document.write("用本文介绍的方法截取10个字节的返回值:<br />");
document.write("<font color='red'>"+substr(str, 10)+"</font><br /><br />");
document.write("截取9个字节的返回值:<br />");
document.write("<font color='red'>"+substr(str, 9)+"</font><br /><br />");
</script>
### 使用 JavaScript 实现网页中字符串截取JavaScript 中,可以利用多种方法来实现字符串截取。对于简单的需求,`substr()` 或 `substring()` 方法能够满足基本需求[^2]。 #### 利用 substring() 进行字符串截取 当需要从一个已知位置到另一个已知位置之间提取子串时,可采用 `substring()` 函数: ```javascript let originalString = "Hello world!"; let resultString = originalString.substring(0, 5); // 结果为 "Hello" ``` 此函数接收两个参数作为起始结束的位置索引(不包括结束位)。如果只给出一个参数,则会返回该位置直到字符串结尾的部分。 #### 处理多字节字符集下的字符串长度计算与截断 考虑到不同编码下字符占用的空间差异,在某些情况下还需特别注意中文等非ASCII字符的影响。下面是一个例子展示了如何考虑这种特殊情况并安全地截短文本[^3]: ```javascript function getTrueLength(str){ let len = 0; for(let i=0;i<str.length;i++){ if(str.charCodeAt(i)>127||str.charCodeAt(i)==94){ len+=1; }else{ len+=0.5; } } return len; } // 获取实际显示宽度不超过给定值的最大合法前缀 function truncateToWidth(str,maxWidth){ let currentLen=0; let validPrefix=''; for(let char of str){ const charLen=(char.charCodeAt()>127)?1:0.5; if(currentLen+charLen<=maxWidth){ validPrefix+=char; currentLen+=charLen; } else { break; } } return `${validPrefix}${currentLen>getTrueLength(validPrefix)?'...':''}`; } ``` 上述代码片段定义了一个辅助函数 `getTrueLength` 来评估传入字符串的实际视觉宽度,并基于这个逻辑实现了 `truncateToWidth` 函数用来获得适合特定最大宽度限制的有效部分。这有助于确保即使存在混合语言输入也能正确处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值