成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

結合Vue控制字符和字節(jié)的顯示個數(shù)

netScorpion / 1189人閱讀

摘要:需求需求結合實現(xiàn)下面的效果輸入框中最多輸入個字符漢字最多顯示個,超出部分以顯示英文最多顯示個,超出部分以顯示實現(xiàn)搭建簡單頁面,并設置簡單樣式在正式開始寫核心代碼之前,要先把代碼結構搭建起來,這樣后面寫的時候就會看著簡潔點了。

需求

需求:結合Vue實現(xiàn)下面的效果

輸入框中最多輸入16個字符

漢字最多顯示5個,超出部分以...顯示

英文最多顯示10個,超出部分以...顯示

實現(xiàn) 搭建簡單頁面,并設置簡單樣式

在正式開始寫核心代碼之前,要先把代碼結構搭建起來,這樣后面寫的時候就會看著簡潔點了。

首先需要一個輸入框用來輸入內(nèi)容,其次需要一個元素,用來顯示輸入框中的內(nèi)容,實現(xiàn)數(shù)據(jù)的雙向綁定。
其中,輸入內(nèi)容的最大長度是可以通過input標簽的屬性來指定的。

內(nèi)容:{{txt}}

輸入的字符個數(shù):{{computedCharLen}}

輸入的字節(jié)個數(shù):{{computedByteLen}}

頁面的結構已經(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ù)內(nèi)容。

var vm = new Vue({
  el: "#app",
  data() {
    return {
      txt: ""
    }
  },
  // 后期代碼在下面補充
})
ASCII范圍內(nèi)與范圍外

了解ASCII的內(nèi)容,請移步到http://www.asciima.com/。

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

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

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

內(nèi)容:{{txt}}

輸入的字符個數(shù):{{computedCharLen}}

輸入的字節(jié)個數(shù):{{computedByteLen}}

補充需要的計算屬性:

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

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

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

控制顯示的內(nèi)容

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

內(nèi)容:{{computedTxt}}

// 控制顯示的內(nèi)容
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) + "..."
    }
  }
}
最終的顯示情況

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

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

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

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

完整代碼

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





  
  
  
  Document
  



  

內(nèi)容:{{computedTxt}}

輸入的字符個數(shù):{{computedCharLen}}

輸入的字節(jié)個數(shù):{{computedByteLen}}

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/89262.html

相關文章

  • 社交系統(tǒng)ThinkSNS+ 如何利用 Laravel 表單驗證來驗證用戶名(我朝獨有需求,兩個字母

    摘要:言歸正傳,之所以寫繼篇,其實是來檢討的,上一次發(fā)表了如何計算字符顯示長度后,有網(wǎng)友幾經(jīng)測試后告知有問題。簡言之單字節(jié)字符占,多字節(jié)字符占字節(jié)。 什么是ThinkSNS+ ThinkSNS(簡稱TS)始于2008年,一款全平臺綜合性社交系統(tǒng),為國內(nèi)外大中小企業(yè)和創(chuàng)業(yè)者提供社會化軟件研發(fā)及技術解決方案,目前最新版本為ThinkSNS+。 后端框架使用laravel,每周和 laravel ...

    xiaodao 評論0 收藏0
  • Unicode與JavaScript詳解

    摘要:本文大部分內(nèi)容轉自阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。字符串處理函數(shù)新增了幾個專門處理字節(jié)碼點的函數(shù)。參考鏈接阮一峰與詳解輔助平面入門 本文大部分內(nèi)容轉自 阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。 Unicode是什么? Unicode源于一個很簡單的想法:將全世界所有的字符包含在一個集合里,計算機只要支持這一個字符集,就能顯示所有的字符,再也不會有...

    econi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<