摘要:需求需求結合實現(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
摘要:言歸正傳,之所以寫繼篇,其實是來檢討的,上一次發(fā)表了如何計算字符顯示長度后,有網(wǎng)友幾經(jīng)測試后告知有問題。簡言之單字節(jié)字符占,多字節(jié)字符占字節(jié)。 什么是ThinkSNS+ ThinkSNS(簡稱TS)始于2008年,一款全平臺綜合性社交系統(tǒng),為國內(nèi)外大中小企業(yè)和創(chuàng)業(yè)者提供社會化軟件研發(fā)及技術解決方案,目前最新版本為ThinkSNS+。 后端框架使用laravel,每周和 laravel ...
摘要:本文大部分內(nèi)容轉自阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。字符串處理函數(shù)新增了幾個專門處理字節(jié)碼點的函數(shù)。參考鏈接阮一峰與詳解輔助平面入門 本文大部分內(nèi)容轉自 阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。 Unicode是什么? Unicode源于一個很簡單的想法:將全世界所有的字符包含在一個集合里,計算機只要支持這一個字符集,就能顯示所有的字符,再也不會有...
閱讀 1022·2021-11-22 14:56
閱讀 993·2021-11-11 16:54
閱讀 7795·2021-09-23 11:55
閱讀 3014·2021-09-22 15:57
閱讀 2797·2021-08-27 16:25
閱讀 675·2019-08-30 15:55
閱讀 1665·2019-08-30 15:43
閱讀 1599·2019-08-30 14:23