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