substring增强方法:按字符串真实长度(字节长度)进行截取

由于实际开发大部分模块的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会自动截取到末尾。
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值