摘要:需求需求結(jié)合實(shí)現(xiàn)下面的效果輸入框中最多輸入個(gè)字符漢字最多顯示個(gè),超出部分以顯示英文最多顯示個(gè),超出部分以顯示實(shí)現(xiàn)搭建簡單頁面,并設(shè)置簡單樣式在正式開始寫核心代碼之前,要先把代碼結(jié)構(gòu)搭建起來,這樣后面寫的時(shí)候就會(huì)看著簡潔點(diǎn)了。
需求
需求:結(jié)合Vue實(shí)現(xiàn)下面的效果
輸入框中最多輸入16個(gè)字符
漢字最多顯示5個(gè),超出部分以...顯示
英文最多顯示10個(gè),超出部分以...顯示
實(shí)現(xiàn) 搭建簡單頁面,并設(shè)置簡單樣式在正式開始寫核心代碼之前,要先把代碼結(jié)構(gòu)搭建起來,這樣后面寫的時(shí)候就會(huì)看著簡潔點(diǎn)了。
首先需要一個(gè)輸入框用來輸入內(nèi)容,其次需要一個(gè)元素,用來顯示輸入框中的內(nèi)容,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。
其中,輸入內(nèi)容的最大長度是可以通過input標(biāo)簽的屬性來指定的。
內(nèi)容:{{txt}}
輸入的字符個(gè)數(shù):{{computedCharLen}}
輸入的字節(jié)個(gè)數(shù):{{computedByteLen}}
頁面的結(jié)構(gòu)已經(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; }
最后一步應(yīng)該就是引入Vue,然后搭建一些簡單的數(shù)據(jù)內(nèi)容。
var vm = new Vue({ el: "#app", data() { return { txt: "" } }, // 后期代碼在下面補(bǔ)充 })ASCII范圍內(nèi)與范圍外
了解ASCII的內(nèi)容,請移步到http://www.asciima.com/。
ASCII中包含256個(gè)字符,因此超過256之外的字符,全部都是非ASCII字符,一般情況下,漢字就是在這個(gè)范圍中。
因此,編碼不在0-255的字符可以使用正則表達(dá)式/[^x00-xff]/g來進(jìn)行匹配。這個(gè)時(shí)候就提供了一個(gè)思路,如果不是ASCII碼中的字符,那么就默認(rèn)它占了兩個(gè)字節(jié)。
我們修改一下頁面結(jié)構(gòu),輸出一些測試信息:
內(nèi)容:{{txt}}
輸入的字符個(gè)數(shù):{{computedCharLen}}
輸入的字節(jié)個(gè)數(shù):{{computedByteLen}}
補(bǔ)充需要的計(jì)算屬性:
computed: { // 獲取字符的個(gè)數(shù) computedCharLen() { return this.txt.length }, // 獲取字節(jié)的個(gè)數(shù) computedByteLen() { return this.txt.replace(/[^x00-xff]/g, "01").length } }
這個(gè)時(shí)候,我們輸入內(nèi)容,出現(xiàn)下面的效果:
這個(gè)時(shí)候會(huì)發(fā)現(xiàn),已經(jīng)實(shí)現(xiàn),ASCII碼范圍內(nèi)的占1位,超出范圍的占2位。
控制顯示的內(nèi)容內(nèi)容顯示使用計(jì)算屬性來實(shí)現(xiàn):
內(nèi)容:{{computedTxt}}
// 控制顯示的內(nèi)容 computedTxt() { return this.methodGetByteLen(this.txt, 10) }
下面補(bǔ)充一下methodGetByteLen方法:
/** * str 需要控制的字符串 * len 字節(jié)的長度,如5個(gè)漢字,10個(gè)英文,輸入?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一二三四",顯示的結(jié)果就是 "一二aaa一..." return str.substr(0, Math.floor(i / 2) * 2) + "..." } } }最終的顯示情況
沒有超過最大指定長度的情況
超過最大指定長度(漢字輸入)
超過最大指定長度(數(shù)字輸入)
超過最大指定長度(漢字和字母的組合)
完整代碼最后,把最終代碼粘貼出來:
Document 內(nèi)容:{{computedTxt}}
輸入的字符個(gè)數(shù):{{computedCharLen}}
輸入的字節(jié)個(gè)數(shù):{{computedByteLen}}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89262.html
摘要:言歸正傳,之所以寫繼篇,其實(shí)是來檢討的,上一次發(fā)表了如何計(jì)算字符顯示長度后,有網(wǎng)友幾經(jīng)測試后告知有問題。簡言之單字節(jié)字符占,多字節(jié)字符占字節(jié)。 什么是ThinkSNS+ ThinkSNS(簡稱TS)始于2008年,一款全平臺(tái)綜合性社交系統(tǒng),為國內(nèi)外大中小企業(yè)和創(chuàng)業(yè)者提供社會(huì)化軟件研發(fā)及技術(shù)解決方案,目前最新版本為ThinkSNS+。 后端框架使用laravel,每周和 laravel ...
摘要:本文大部分內(nèi)容轉(zhuǎn)自阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。字符串處理函數(shù)新增了幾個(gè)專門處理字節(jié)碼點(diǎn)的函數(shù)。參考鏈接阮一峰與詳解輔助平面入門 本文大部分內(nèi)容轉(zhuǎn)自 阮一峰前輩的文章,更新了部分內(nèi)容并加入了部分自己的理解。 Unicode是什么? Unicode源于一個(gè)很簡單的想法:將全世界所有的字符包含在一個(gè)集合里,計(jì)算機(jī)只要支持這一個(gè)字符集,就能顯示所有的字符,再也不會(huì)有...
閱讀 1017·2021-11-22 14:56
閱讀 983·2021-11-11 16:54
閱讀 7715·2021-09-23 11:55
閱讀 3008·2021-09-22 15:57
閱讀 2793·2021-08-27 16:25
閱讀 672·2019-08-30 15:55
閱讀 1662·2019-08-30 15:43
閱讀 1596·2019-08-30 14:23