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

Posted darr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 中英文字符长度和截断处理相关的知识,希望对你有一定的参考价值。

因:javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个)

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

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

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

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

一.String.len() 方法,计算字符串字节个数:

String.prototype.len=function()          {                 
 return this.replace(/[^\\x00-\\xff]/g,"rr").length;          
}

二.String.sub(endindex) 方法,从0开始截取endindex长度的字节数。

String.prototype.sub = function(n)
{    
 var r = /[^\\x00-\\xff]/g;    
 if(this.replace(r, "mm").length <= n) return this;   
 // n = n - 3;    
 var m = Math.floor(n/2);    
 for(var i=m; i<this.length; i++) {    
 if(this.substr(0, i).replace(r, "mm").length>=n) {    
  return this.substr(0, i) ; }    
 } return this;   
};

 三.根据unicode编码范围

String.prototype.gblen = function() {    
    var len = 0;    
    for (var i=0; i<this.length; i++) {    
        if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) {    
             len += 2;    
         } else {    
             len ++;    
         }    
     }    
    return len;    
}  

参考:http://blog.csdn.net/testcs_dn/article/details/21412303

 charCodeAt()

定义和用法

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。

方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。

 

字符编码:http://www.cnblogs.com/darr/p/5355178.html

 

以上是关于javascript 中英文字符长度和截断处理的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 将字符串截断为设定长度,在字边界处断开

当字符串长于列长度定义时,如何在存储字符串时静默截断字符串?

怎么解决过程中提示:将截断字符串或二进制数据?

织梦tags标签长度不够被截断的处理方法

SQL sever 中的警告“将截断字符串或二进制数据 语句已终止” 是啥意思啊? 我是刚学这个的?懂的帮帮我

sql server 2000 中文字符串被截断是怎么回事