包含汉字、空格、特殊符号、英文等实际长度获取
1.关于如何判断中英文双字符
str.charCodeAt(index) 可以返回相应的位置的字符的Unicode编码(唯一码)
判断方式一:if(str.charCodeAt(i) & 0xff00) != 0){//双字节}
这种方式根据获取的Unicode编码与0xff00做‘与’运算,从而进行筛检;
0xff00是 “1111 1111 0000 0000” 的十六进制表示法;
单字节的Unicode编码的二进制最多只有八位,与操作后,结果一定是0
判断方式二:
根据1111 1111转换后等于255,可以得到只要大于255就可以if(str.charCodeAt(i) & 0xff00)>255){//双字节}
2.获取长度
/*
*获取字符串实际占位长度(包含,汉字、英文、符号、空格等...)
* @param {string} str
* @return {number} len
* */
function getLength(str) {
var len = 0;
for(var i = 0;i<str.length;i++){
/*charCodeAt(index),返回指定位置的字符的Unicode编码*/
if (str.charCodeAt(i)>255){
len+=2;
}else{
len++;
}
}
return len;
}
//另外一种思路:通过将字符通过正则转换成单字符占位,统计单字符长度
//str.replace(/[^\x00-\xff]/g,"ab").length
3.获取指定长度子串
/*
* 按指定长度截取字符串(中文等占位2,英文等1)
* @param {string,number} str,length (源字符串,截取长度)
* @return {string} cutStr (截取后字符串)
* */
function getCutStr(str,length) {
var cutStr = '',
len = 0;
for(var i=0;i<str.length;i++){
console.log(i)
if(str.charCodeAt(i)>255){
len+=2;
if (len==length || len==length-1){
cutStr = str.substring(0, i+1)
return cutStr + '...';
}
}else{
len++;
if (len==length){
cutStr = str.substring(0, i+1)
return cutStr + '...';
}
};
}
if (len<=length){
return str;
}
}
参考:http://www.cnblogs.com/zhujl/archive/2011/10/13/2210414.html