【转】javascript 中英文字符长度和截断处理
2017-10-26 18:37
489 查看
转自:http://www.cnblogs.com/darr/p/5354858.html
javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个)。
所以对中英文截取同样长度需要处理一下。大致有两种方法处理中英文字符:
1、把中文字符escape了,然后计算字节长度。
2、用正则表达式把中文字符转换2个字节的符号,然后计算长度。
推荐第二种方法,简单明了,速度快,效率高。
按照第二种方法,对javascript 的 String类型做以下扩展:
一.String.len() 方法,计算字符串字节个数:
二.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;
}
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个)。
所以对中英文截取同样长度需要处理一下。大致有两种方法处理中英文字符:
1、把中文字符escape了,然后计算字节长度。
2、用正则表达式把中文字符转换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;
}
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
相关文章推荐
- javascript 中英文字符长度和截断处理
- javascript 中英文字符长度和截断处理
- 截断字符串,取指定长度字符(中英文通用)
- JavaScript不分中英文字符长度判断
- 处理字符串的一些js/jq方法(去除HTML,去除空格,计算真实长度,截取中英文字符)
- javascript中英文字符长度判断
- 处理EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的数据截断
- 如何处理Oledb中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- 如何处理ODBC中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
- JavaScript 中英文字符判断和长度计算
- 处理中英文字符长度截取
- 处理URL中的中文等字符,计算含有中英文的字符串的长度
- 在javascript中获取中英文字符长度的问题
- 处理字符串的一些js/jq方法(去除HTML,去除空格,计算真实长度,截取中英文字符)
- js判断字符长度以及中英文数字等
- 批处理如何计算任意字符串的字符长度?
- php, html, javascript, mysql 之间的特殊字符处理
- java 实现中英文混时得到长度 过长字符替换
- 用Javascript(js)进行HTML转义工具(处理特殊字符显示)