JavaScript实现支持中文截取的substr函数代码

作者:半夏时间:2026-10-27 09:47:09浏览:415

本文提供了一段JavaScript代码,用于实现支持中文(双字节字符)的字符串截取功能。通过判断字符编码值区分单字节与双字节字符,自定义实现了类似substr的sb_substr函数,并给出了处理文件名截断等实际应用场景的示例。

支持中文截取的JavaScript实现

代码示例如下:

<script language="JavaScript">
// 计算字符总长度
function getChars(str) {
var i = 0;
var c = 0.0;
var unicode = 0;
var len = 0;
if (str == null || str == "") {
return 0;
 }
len = str.length;
for(i = 0; i < len; i++) {
unicode = str.charCodeAt(i);
if (unicode < 127) { // 判断字符是单字节还是双字节
c += 1;
} else { // 中文字符
c += 2;
  }
 }
return c;
}
function sb_strlen(str) {
return getChars(str);
}
// 截取字符串
function sb_substr(str, startp, endp) {
var i=0; c = 0; unicode=0; rstr = '';
var len = str.length;
var sblen = sb_strlen(str);
if (startp < 0) {
startp = sblen + startp;
    }
if (endp < 1) {
endp = sblen + endp;// - ((str.charCodeAt(len-1) < 127) ? 1 : 2);
    }
// 定位起始位置
for(i = 0; i < len; i++) {
if (c >= startp) {
break;
        }
var unicode = str.charCodeAt(i);
if (unicode < 127) {
c += 1;
} else {
c += 2;
  }
 }
// 开始截取
for(i = i; i < len; i++) {
var unicode = str.charCodeAt(i);
if (unicode < 127) {
c += 1;
} else {
c += 2;
  }
rstr += str.charAt(i);
if (c >= endp) {
break;
  }
 }
return rstr;
}
// 调用示例:
function getShortFileName(filename) {
short_filename = filename;
if (sb_strlen(short_filename) > 61) {
short_filename = sb_substr(short_filename, 0, 36) + ' ... ' + sb_substr(short_filename, -20);
    }
return short_filename;
}
var chara = 'ni你2好1啊!'
js_self = chara.substr(4);
test = sb_substr(chara,4);
alert("js_self:"+js_self+"ext:"+test);
</script>

代码示例如下:

function mb_strlen(str) {
var len = 0;
for(var i = 0; i < str.length; i++) {
len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
 }
return len;
}

<html></head><body></body></html>

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

作者最新文章