您好,登錄后才能下訂單哦!
場景:
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處理包含中文的字符串實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。