六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 19|回复: 0

转载:javascript 中英文字符长度和截断处理

[复制链接]

升级  32%

4

主题

4

主题

4

主题

童生

Rank: 1

积分
16
 楼主| 发表于 2013-1-29 09:22:01 | 显示全部楼层 |阅读模式
因:javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个)

果:中英文字符在页面上的占位空间存在差异。中文的web开发人员不能一刀切,对中英文都截取同样长度的字符数。

网上大致有两种方法处理中英文字符。一种是把中文字符escape了,然后计算字节长度。一种是用正则表达式把中文字符转换2个字节的符号,然后计算长度

推荐第二种方法,简单明了,速度快,效率高。

按照第二种方法,对javascript 的 String类型做以下扩展:

一.String.len() 方法,计算字符串字节个数:
1 String.prototype.len=function()         
2 {                 
3 return this.replace(/[^\x00-\xff]/g,"rr").length;         
4 }

二.String.sub(endindex) 方法,从0开始截取endindex长度的字节数。
1
2 String.prototype.sub = function(n)
3 {   
4 var r = /[^\x00-\xff]/g;   
5 if(this.replace(r, "mm").length <= n) return this;   
6 // n = n - 3;   
7 var m = Math.floor(n/2);   
8 for(var i=m; i<this.length; i++) {   
9 if(this.substr(0, i).replace(r, "mm").length>=n) {   
10   return this.substr(0, i) ; }   
11 } return this;   
12 };  

使用方法:最好写成公用脚本,放到所有脚本前面,调用如下:

1 var a='tom正在测试中英文字符处理';
2 alert(a.len());
3 alert(a.sub(5));
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表