JavaScript 擷取指定長度字串 區分漢字和英文字元

admin發表於2019-10-19

擷取字串是常見操作,比如,往往將新聞標題的長度規定在一個恰當的範圍之內。

此時就需要進行擷取字串的操作,實現方式有多種,可以使用substr()方法。

上述方法有時候並不能完全滿足需求,有時需要區分漢字還是英文字元。

一個英文字元佔據一個位元組,一個漢字佔據兩個位元組。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<script type="text/javascript">
function cutString(str, len) {
  var strlen = 0;
  var restr = "";
  for (var i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) > 128) {
      strlen += 2;
    }
    else {
      strlen++;
    }
    restr += str.charAt(i);
    if (strlen >= len) {
      return restr;
    }
  }
  return restr;
}
var mystring = "hello,歡迎來到螞蟻部落"
var num = 10;
alert(cutString(mystring, num));
</script>
</head>
<body>
 
</body>
</html>

以上程式碼可以擷取指定長度的字串,並且能夠區分漢字和英文字元:

一.實現原理:

(1).通過字串length屬性取得字串中字元的數目,此時不區分漢字和英文字元。

(2).然後通過for迴圈來遍歷它們,並利用charCodeAt()方法獲得相應位置字元的ASCII碼值。

(3).英文字元的ASCII碼值最大為127,所以小128即是英文字元,大於128即是漢字。

(4).如果是漢字則strlen值加2,如果是英文字元則加1,並且將相應索引的字元新增到restr中。

(5).最後判斷strlen值是否已經大於等於指定長度,如果為真則返回restr,否則繼續進行for迴圈。

(6).如果直到for迴圈完成也沒有超過指定長度,最後返回該字串。

二.程式碼註釋:

(1).var strlen=0用於儲存每一次for迴圈後字串的長度。

(2).var restr=""用於儲存每一次for迴圈後的字串。

(3).for迴圈用來便利字串中的每一個字元,這裡的字元是不區分中英文的。

(4).if(str.charCodeAt(i)>128)判斷指定字元是英文字元還是漢字,如果是漢字strlen加2,否則加1。

(5).restr+=str.charAt(i);將指定索引的字元新增到restr。

(6).if(strlen>=len)判斷是否已經超過指定長度,超過則返回restr,否則繼續執行for迴圈。

(7).最後一個return rest:如果整個字串長度都沒有超過指定長度,那麼原樣返回。

相關文章