由于实际开发大部分模块的UI对于字数有限制,在迫不得已的情况下可采用截取的粗暴模式,分享一下笔者构思的方法:
有不足或者错误之处欢迎各位多多指正!非常感谢!!
/**
* create by liangyu on 2017/04/23
* @author liangy
*
* 按字符串字节长度(真实长度)进行截取.
* 使用原生的JavaScript代码编写.
*
* @param {number} start: 必须,字符串截取部分的起始下标.
* @param {number} length: 可选,字符串截取部分的字节长度(长度:中文=2;英文=1),不传参数(或者传的参数超过可截长度)则截取到末尾。
* @returns {string}: 返回截取的字符串.
* @example
*/
String.prototype.substringByRealLength=function(start,length){
if(typeof length=='undefined'){//没有指定截取长度
return this.substring(start);//截取到末尾
}
var stringLength = this.length;//获取字符串字符长度(中文=1;英文=1)
//i的含义:从截取开始处进行遍历 ; j的含义:遍历计数标志,当j>length说明已经遍历到需要截取的长度,无需继续遍历
for(i=start,j=1; i<stringLength && j<=length; i++,j++) {
if ((this.charCodeAt(i) & 0xff00) != 0)//中文,此处算法是依照“按位与”运算进行判断,因为中文字符unicode>127
length--;//将charCodeAt(i)对应的中文的字节长度(2)转换为字符长度(1)
}
//经过上面的遍历,length已经由字节长度变成了字符长度,所以:
var end = start+length; //结束下标
return this.substring(start,end);//若结束下标过长,js原生substring会自动截取到末尾。
}