最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js處理包含中文的字符串實(shí)例

 更新時(shí)間:2017年10月11日 08:48:12   作者:Dantis·Deng  
下面小編就為大家?guī)?lái)一篇js處理包含中文的字符串實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

場(chǎng)景:

js中String類型自帶的屬性length獲取的是字符串的字符數(shù)目,但是前端經(jīng)常會(huì)需要限制字符串的顯示長(zhǎng)度,一個(gè)中文字符又大概占兩個(gè)英文小寫字符的顯示位置,所以中英文混合的情況下用length值來(lái)判斷顯示長(zhǎng)度往往并不正確。

常規(guī)的解決辦法是遍歷字符串,中文字符計(jì)長(zhǎng)度2,非中文字符計(jì)長(zhǎng)度1,通過(guò)新計(jì)算出來(lái)長(zhǎng)度總和來(lái)限制字符串的顯示長(zhǎng)度??创a↓↓↓

var Tools ={
 //是否包含中文
 hasZh: function(str){
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是漢字,則字符串長(zhǎng)度加2
    return true;
   return false;
  }
 },
 //重新計(jì)算長(zhǎng)度,中文+2,英文+1
 getlen: function(str){
  var strlen = 0;
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是漢字,則字符串長(zhǎng)度加2
    strlen += 2;
   else
    strlen++;
  }
  return strlen;
 },
 //限制長(zhǎng)度
 limitlen: function(str, len){
  var result = "";
  var strlen = 0;
  for(var i = 0;i < str.length; i++)
  {
   if(str.charCodeAt(i) > 255) //如果是漢字,則字符串長(zhǎng)度加2
    strlen += 2;
   else
    strlen++;

   result += str.substr(i,1);

   if(strlen >= len){
    break;
   }
  }
  return result;
 }
}

這種方法的原理是根據(jù)中英文的unicode編碼范圍不同來(lái)判斷的,中文占2個(gè)字節(jié),英文占1個(gè)字節(jié),所以中文的unicode編碼值肯定大于2^8-1=255。

上述方法可以更嚴(yán)謹(jǐn)一點(diǎn):就是考慮unicode編碼范圍,具體的范圍可以戳Unicode Table

PS: 漢字的unicode編碼范圍16進(jìn)制為4E00-9FA5,10進(jìn)制則為:19968-40869,即判斷中文的準(zhǔn)確表達(dá)式為:

str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869

插一句不太嚴(yán)謹(jǐn)?shù)脑?,代碼不用限制太嚴(yán)謹(jǐn)?shù)姆秶?,畢竟你不知道用?測(cè)試)會(huì)輸哪些奇怪的東西。

以上這篇js處理包含中文的字符串實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

罗源县| 广昌县| 福清市| 大竹县| 抚松县| 固镇县| 屏东市| 阜南县| 古丈县| 门头沟区| 霸州市| 黄平县| 乌拉特前旗| 淳化县| 安多县| 金湖县| 五莲县| 蕉岭县| 南部县| 府谷县| 阿勒泰市| 平顶山市| 土默特右旗| 鄂州市| 柳州市| 美姑县| 尤溪县| 剑川县| 岳池县| 循化| 酉阳| 中宁县| 德阳市| 资兴市| 安吉县| 沭阳县| 五华县| 科技| 绿春县| 金溪县| 卓资县|