/*
* 截取指定字节长度的字符串
* 注:半角长度为1,全角长度为2
* str:字符串
* len:截取长度
* return: 截取后的字符串及是否截取的标记(扩展用)code=1 字符串截断 code=0 字符串未截断
*/
function cutStrByte(str, len){
//校验参数
if(!str || !len){
return {"cutStr":"","code":0};
}
var code = "1",// 默认返回code值,已截断
strLen = str.length,// 原字符串长度
cutStr;
//如果字符串长度小于截取长度的一半,则返回全部字符串
if (strLen <= len/2){
cutStr = str;
code = "0";
}else{
//遍历字符串
var strByteCount = 0;
for (var i = 0; i < strLen ; i++ ){
//中文字符字节加2 否则加1
strByteCount += getByteLen(str.charAt(i));
//i从0开始 截断时大于len 只截断到第i个
if(strByteCount > len){
cutStr = str.substring(0, i);
break;
}else if(strByteCount == len){
cutStr = str.substring(0, i + 1);
break;
}
}
}
//cutstr为空,没有截断字符串
if (!cutStr){
cutStr = str;
code = "0";
}
return {"cutStr":cutStr, "code":code};
}
/**
* 获取字节长度,全角字符两个单位长度,半角字符1个单位长度
*/
function getByteLen(val) {
var len = 0;
if(!val){
return len;
}
for (var i = 0; i < val.length; i++) {
if(!val[i]){
continue;
}
// 全角
if (val[i].match(/[^\x00-\xff]/ig) != null){
len += 2;
}else{
len += 1;
}
}
return len;
};