时间:2021-07-01 10:21:17 帮助过:2人阅读
场景:
js中String类型自带的属性length获取的是字符串的字符数目,但是前端经常会需要限制字符串的显示长度,一个中文字符又大概占两个英文小写字符的显示位置,所以中英文混合的情况下用length值来判断显示长度往往并不正确。
常规的解决办法是遍历字符串,中文字符计长度2,非中文字符计长度1,通过新计算出来长度总和来限制字符串的显示长度。看代码↓↓↓
- var Tools ={
- //是否包含中文
- hasZh: function(str){
- for(var i = 0;i < str.length; i++)
- {
- if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
- return true;
- return false;
- }
- },
- //重新计算长度,中文+2,英文+1
- getlen: function(str){
- var strlen = 0;
- for(var i = 0;i < str.length; i++)
- {
- if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
- strlen += 2;
- else
- strlen++;
- }
- return strlen;
- },
- //限制长度
- limitlen: function(str, len){
- var result = "";
- var strlen = 0;
- for(var i = 0;i < str.length; i++)
- {
- if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
- strlen += 2;
- else
- strlen++;
- result += str.substr(i,1);
- if(strlen >= len){
- break;
- }
- }
- return result;
- }
- }
这种方法的原理是根据中英文的unicode编码范围不同来判断的,中文占2个字节,英文占1个字节,所以中文的unicode编码值肯定大于2^8-1=255。
上述方法可以更严谨一点:就是考虑unicode编码范围,具体的范围可以戳Unicode Table
PS: 汉字的unicode编码范围16进制为4E00-9FA5,10进制则为:19968-40869,即判断中文的准确表达式为:
- str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869
插一句不太严谨的话,代码不用限制太严谨的范围,毕竟你不知道用户(测试)会输哪些奇怪的东西。
相关推荐:
jQuery字符串全部替换的实现方法
vue语法拼接字符串详解
js截取字符串功能的实现方法
以上就是js处理包含中文字符串实例分享的详细内容,更多请关注Gxl网其它相关文章!