时间:2021-05-26
场景:
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插一句不太严谨的话,代码不用限制太严谨的范围,毕竟你不知道用户(测试)会输哪些奇怪的东西。
以上这篇js处理包含中文的字符串实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java判断字符串中是否包含中文的实例详解Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中文的编码区间为:0x4e00--0x9fbb,不
1.单字节字符串反转php提供了用于字符串反转的函数strrev()$str='abcdef';echostrrev($str);2.对于包含中文的多字节字符串
有时候我们需要计算一个字符串中包含的字数,对于纯英文字符串,字数等于字符串长度,用strlen函数即可获得,但如果字符串中包含中文怎办?mb_strlen可以实
本文实例讲述了JS去除字符串中空格的方法。分享给大家供大家参考,具体如下:去掉字符串中的所有空格,不仅仅包含前后空格:text=text.replace(/\s
批处理字符串分割实例使用for命令可以对字符串进行分段处理。分割字符串@echooff::定义一个以分号作为分隔的字符串setstr=AAA;BBB;CCC;D