有时在显示某段文字的时候,可能会太长,影响我们页面的显示效果。如果仅是英文,那么我们可以用String.substring(start, end)函数就已经够用了。但是通常我们都会遇到既有英文,又有汉字的情况。而汉字是占用2个字节的,如果用String.substring(start, end)截取字符串的话,会发现汉字截取后比英文截取后个数虽然相同,但是长度还是长出去不少(具体要视字符个数来决定)。
为了解决这个问题昨天写了根据字节数截取字符串的函数。
具体使用很简单,跟String.subString(start, end)一样使用就可。比如:var str = "诶必塞第衣爱抚即"; var str1 = str.subCHStr(2, 2); var str2 = str.subCHString(2, 4); alert(str1 + " == " + str2);

Code
1
Code
2
//计算字符串长度
3
String.prototype.strLen = function()
{
4
var len = 0;
5
for (var i = 0; i < this.length; i++)
{
6
if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0) len += 2; else len ++;
7
}
8
return len;
9
}
10
//将字符串拆成字符,并存到数组中
11
String.prototype.strToChars = function()
{
12
var chars = new Array();
13
for (var i = 0; i < this.length; i++)
{
14
chars[i] = [this.substr(i, 1), this.isCHS(i)];
15
}
16
String.prototype.charsArray = chars;
17
return chars;
18
}
19
//判断某个字符是否是汉字
20
String.prototype.isCHS = function(i)
{
21
if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0)
22
return true;
23
else
24
return false;
25
}
26
//截取字符串(从start字节到end字节)
27
String.prototype.subCHString = function(start, end)
{
28
var len = 0;
29
var str = "";
30
this.strToChars();
31
for (var i = 0; i < this.length; i++)
{
32
if(this.charsArray[i][1])
33
len += 2;
34
else
35
len++;
36
if (end < len)
37
return str;
38
else if (start < len)
39
str += this.charsArray[i][0];
40
}
41
return str;
42
}
43
//截取字符串(从start字节截取length个字节)
44
String.prototype.subCHStr = function(start, length)
{
45
return this.subCHString(start, start + length);
46
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步