您的位置:首页 > 其它

中英文混合长度的计算以及截取

2015-09-06 15:18 411 查看

A.计算中文以及英文混合字符串的长度

1.中文算2个字符

2.英文算一个字符

代码

 <script type="text/javascript">

  window.onload = function(){

 function getByteLen(val) {  

           var len = 0;            

           for (var i = 0; i < val.length; i++) {

                      var a = val.charAt(i);   

                      if (a.match(/[^\x00-\xff]/ig) != null){   

                             len += 2;             

                      }else{      

                            len += 1;             

                   }        

            }            

        return len;   

    }     

     alert(getByteLen('中国2ds'));    

}

</script>

知识详解:

  xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。 
   [^\x00-\xff]即ASCII 编码不在0-255的字符

匹配双字节字符[X00-XFF],比如大写英文字母。加上^表示相反的意思,就是匹配非双字节的字符。小写字母和汉字都会被匹配出来。
[^X00-XFF]等同于[^\x00-\xff]

B.截取中英文混合的字符串

介绍:先通过正则找到中文字符,然后替换成两个英文字符,再计算长度

function subString(str, len) {
var newLength = 0;
var newStr = "";
var chineseRegex = /[^\x00-\xff]/g;
var singleChar = "";
var strLength = str.replace(chineseRegex,"**").length;
for(var i = 0;i < strLength;i++) {
singleChar = str.charAt(i).toString();
if(singleChar.match(chineseRegex) != null) {
newLength += 2;
}else {
newLength++;
}
if(newLength > len) {
break;
}
newStr += singleChar;
}
if(strLength > len) {
newStr += "...";
}
return newStr;
}
alert(subString("js字符串test截取测试",10));

这里将会输出“js字符串t...”,但是我们截取的长度是10,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: