首頁  >  文章  >  web前端  >  js處理包含中文字串實例分享

js處理包含中文字串實例分享

小云云
小云云原創
2018-01-25 11:35:321952瀏覽

本文主要為大家帶來一篇js處理包含中文的字串實例。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

場景:

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處理包含中文字串實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn