溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js處理包含中文的字符串實例

發(fā)布時間:2020-10-10 12:01:42 來源:腳本之家 閱讀:159 作者:Dantis·Deng 欄目:web開發(fā)

場景:

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

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

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;
 }
}

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

上述方法可以更嚴謹一點:就是考慮unicode編碼范圍,具體的范圍可以戳Unicode Table

PS: 漢字的unicode編碼范圍16進制為4E00-9FA5,10進制則為:19968-40869,即判斷中文的準確表達式為:

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

插一句不太嚴謹?shù)脑?,代碼不用限制太嚴謹?shù)姆秶吘鼓悴恢烙脩?測試)會輸哪些奇怪的東西。

以上這篇js處理包含中文的字符串實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI