溫馨提示×

溫馨提示×

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

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

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

發(fā)布時間:2021-04-08 17:02:44 來源:億速云 閱讀:652 作者:Leah 欄目:web開發(fā)

本篇文章為大家展示了怎么在Vue中控制字符和字節(jié)的顯示個數(shù),內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

首先需要一個輸入框用來輸入內容,其次需要一個元素,用來顯示輸入框中的內容,實現(xiàn)數(shù)據(jù)的雙向綁定。

其中,輸入內容的最大長度是可以通過input標簽的屬性來指定的。

<div id="app">
 <input v-model="txt" class="clsinp" maxlength="16" placeholder="請輸入內容" type="text">
 <div class="clsmsg">
  <p>內容:<span>{{txt}}</span></p>
  <p>輸入的字符個數(shù):<span>{{computedCharLen}}</span></p>
  <p>輸入的字節(jié)個數(shù):<span>{{computedByteLen}}</span></p>
 </div>
</div>

頁面的結構已經(jīng)搭建完成了,那下面就是做一些簡單的樣式優(yōu)化了。

* { margin: 0; padding: 0; -webkit-box-sizing: border-box; box-sizing: border-box; }
body { background: #efefef; }
.clsinp { width: 100%; height: 40px; outline: none; line-height: 40px; font-size: 16px; padding: 0 10px; margin-top: 20px; color: blue; }
.clsmsg { padding: 10px 10px; }
.clsmsg span { color: blue; }

最后一步應該就是引入Vue,然后搭建一些簡單的數(shù)據(jù)內容。

var vm = new Vue({
 el: '#app',
 data() {
  return {
   txt: ''
  }
 },
 // 后期代碼在下面補充
})

ASCII范圍內與范圍外

了解ASCII的內容,請移步到http://www.asciima.com/

ASCII中包含256個字符,因此超過256之外的字符,全部都是非ASCII字符,一般情況下,漢字就是在這個范圍中。

因此,編碼不在0-255的字符可以使用正則表達式/[^\x00-\xff]/g來進行匹配。這個時候就提供了一個思路,如果不是ASCII碼中的字符,那么就默認它占了兩個字節(jié)。

我們修改一下頁面結構,輸出一些測試信息:

<div id="app">
 <input v-model="txt" class="clsinp" maxlength="16" placeholder="請輸入內容" type="text">
 <div class="clsmsg">
  <p>內容:<span>{{txt}}</span></p>
  <p>輸入的字符個數(shù):<span>{{computedCharLen}}</span></p>
  <p>輸入的字節(jié)個數(shù):<span>{{computedByteLen}}</span></p>
 </div>
</div>

補充需要的計算屬性:

computed: {
 // 獲取字符的個數(shù)
 computedCharLen() {
  return this.txt.length
 },
 // 獲取字節(jié)的個數(shù)
 computedByteLen() {
  return this.txt.replace(/[^\x00-\xff]/g, '01').length
 }
}

這個時候,我們輸入內容,出現(xiàn)下面的效果:

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

這個時候會發(fā)現(xiàn),已經(jīng)實現(xiàn),ASCII碼范圍內的占1位,超出范圍的占2位。

控制顯示的內容

內容顯示使用計算屬性來實現(xiàn):

<p>內容:<span>{{computedTxt}}</span></p>
// 控制顯示的內容
computedTxt() {
 return this.methodGetByteLen(this.txt, 10)
}

下面補充一下methodGetByteLen方法:

/**
 * str 需要控制的字符串
 * len 字節(jié)的長度,如5個漢字,10個英文,輸入?yún)?shù)就是10
 */
methodGetByteLen(str, len) {
 // 如果字節(jié)的長度小于控制的長度,那么直接返回
 if (this.computedByteLen <= len) {
  return str
 }
 for (let i = Math.floor(len / 2); i < str.length; i++) {
  if (str.substr(0, i).replace(/[^\x00-\xff]/g, '01').length >= len) {
   // Math.floor(i / 2) * 這里是控制特殊情況的顯示
   // 如 '一二aaa一二三四',顯示的結果就是 '一二aaa一...'
   return str.substr(0, Math.floor(i / 2) * 2) + '...'
  }
 }
}

最終的顯示情況沒有超過最大指定長度的情況

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

超過最大指定長度(漢字輸入)

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

超過最大指定長度(數(shù)字輸入)

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

超過最大指定長度(漢字和字母的組合)

怎么在Vue中控制字符和字節(jié)的顯示個數(shù)

完整代碼

最后,把最終代碼粘貼出來:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta txt="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style type="text/css">
  * {
   margin: 0;
   padding: 0;
   -webkit-box-sizing: border-box;
   box-sizing: border-box;
  }

  body {
   background: #efefef;
  }

  .clsinp {
   width: 100%;
   height: 40px;
   outline: none;
   line-height: 40px;
   font-size: 16px;
   padding: 0 10px;
   margin-top: 20px;
   color: blue;
  }

  .clsmsg {
   padding: 10px 10px;
  }

  .clsmsg span {
   color: blue;
  }

 </style>
</head>

<body>
 <div id="app">
  <input v-model="txt" class="clsinp" maxlength="16" placeholder="請輸入內容" type="text">
  <div class="clsmsg">
   <p>內容:<span>{{computedTxt}}</span></p>
   <p>輸入的字符個數(shù):<span>{{computedCharLen}}</span></p>
   <p>輸入的字節(jié)個數(shù):<span>{{computedByteLen}}</span></p>
  </div>
 </div>
</body>

</html>

<script type="text/javascript" src="./vue2.5.1.js"></script>
<script type="text/javascript">
 var vm = new Vue({
  el: '#app',
  data() {
   return {
    txt: ''
   }
  },
  // 后期代碼在下面補充
  methods: {
   methodGetByteLen(str, len) {
    if (this.computedByteLen <= len) {
     return str
    }
    for (let i = Math.floor(len / 2); i < str.length; i++) {
     if (str.substr(0, i).replace(/[^\x00-\xff]/g, '01').length >= len) {
      return str.substr(0, Math.floor(i / 2) * 2) + '...'
     }
    }
   }
  },
  computed: {
   // 獲取字符的個數(shù)
   computedCharLen() {
    return this.txt.length
   },
   // 獲取字節(jié)的個數(shù)
   computedByteLen() {
    return this.txt.replace(/[^\x00-\xff]/g, '01').length
   },
   // 控制顯示的內容
   computedTxt() {
    return this.methodGetByteLen(this.txt, 10)
   }
  }
 })

</script>

上述內容就是怎么在Vue中控制字符和字節(jié)的顯示個數(shù),你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

vue
AI