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

資訊專欄INFORMATION COLUMN

如何實(shí)現(xiàn)emoji文本字?jǐn)?shù)計算?以及輸入框限制指定字符數(shù)?

ShowerSun / 2924人閱讀

摘要:結(jié)合和簡單的正則就可以實(shí)現(xiàn)一個文本計算函數(shù)其實(shí)當(dāng)字符計算解決后,輸入框限制字符數(shù)就輕而易舉了。思路就是每次事件發(fā)生時,先判斷當(dāng)前字符數(shù)是否超過限制,如果超出,則用上一次的文本替換當(dāng)前輸入框的文本。

一個emoji文本用javascript該如何正確計算其文本長度?
最容易想到的自然是用length來求長度。以下列舉常見emoji和復(fù)雜emoji。

// size: 2
"?".length
// size: 7
"????".length

由于JavaScript的字符編碼問題,自然行不通。詳情請參見文章末尾的博文。
基于常見的emoji可以使用以下正則匹配。

// 匹配UTF-16的代理對,把代理對改為一個BMP的字符
function countSymbols(string) {
    var regexAstralSymbols = /[uD800-uDBFF][uDC00-uDFFF]/g;
    return string.replace(regexAstralSymbols, "_").length;
}
countSymbols("?"); //  size: 1
countSymbols("????"); // size: 4

但是仍然出現(xiàn)了問題。那么一些更復(fù)雜的emoji表情的時候,還是掛掉了。????這個表情其實(shí)是蘋果中表情農(nóng)民,在Full Emoji List, v5.0里第218個表情。此表情由U+1F468 U+1F3FC U+200D U+1F33E組成。所以直接求長度為 2 + 2 + 1 + 2 = 7。這也在所難免了。

那么該做如何解?

這時候社區(qū)里有twitter的關(guān)于emoji的一個工具庫twemoji,利用這個工具庫,可以方便的實(shí)現(xiàn)emoji文本的實(shí)現(xiàn)。

twemoji.parse("????")
// ""

因此可見。twemoji正確的識別了并達(dá)到了我們的預(yù)期。用戶任意輸入一個emoji,我們都只計算為一個長度。利用twemoji解析emoji并返回圖片的特性,結(jié)合正則可以實(shí)現(xiàn)一個函數(shù)。

function countSymbols(string) {
    return twemoji.parse(string).replace(//g, "_").length;
}
countSymbols("?"); //  size: 1
countSymbols("????"); // size: 1

好的問題解決了。結(jié)合twemoji和簡單的正則就可以實(shí)現(xiàn)一個文本計算函數(shù)

countSymbols("???? and ? parse correctly!"); // size: 24

其實(shí)當(dāng)字符計算解決后,輸入框限制字符數(shù)就輕而易舉了。思路就是每次input事件發(fā)生時,先判斷當(dāng)前字符數(shù)是否超過限制,如果超出,則用上一次的文本替換當(dāng)前輸入框的文本。大致代碼如下。

var prevText = "";
var textarea = document.getElementById("input-area");
var limit = 250;
function limitTextSize(){
    var text = textarea.value;
    var size = countSymbols(text);
    if(size > limit) {
        textarea.value = prevText;
    } else {
        prevText = text;
    }
}

希望能給大家?guī)睃c(diǎn)幫助。求點(diǎn)贊哈哈~

Unicode與JavaScript詳解
Emoji.prototype.length —— Unicode 字符那些事兒
JavaScript 有個 Unicode 的天坑

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90000.html

相關(guān)文章

  • HTML常用表單標(biāo)簽

    摘要:也可以通過和屬性來設(shè)置文本域的尺寸,但是屬性設(shè)置不太標(biāo)準(zhǔn),最好的方法是通過設(shè)置。設(shè)置里默認(rèn)大小的文本域?qū)嶋H頁面效果屬性用于設(shè)置文本域可見文本的行數(shù)。此外,屬性也適用于文本域。 1.表單元素 HTML 表單用于收集用戶輸入。 代碼示例: 常用屬性解釋: action屬性定義在提交表單時執(zhí)行的動作通常,表單會被提交到 web 服務(wù)器上的網(wǎng)頁。在上面的例子中,指定了某個服務(wù)...

    zhongmeizhi 評論0 收藏0
  • textarea,input輸入字符數(shù)限制

    摘要:但是有時候我們需要實(shí)現(xiàn)文本框中輸入中文長度是或是,其他非中文輸入是。因?yàn)橹形妮斎敕ǖ脑诜钦捷斎霑r,對于我們這個算法,會出現(xiàn)剩余字符數(shù)為負(fù)值的情況。 textarea,input輸入字符數(shù)限制。   在做開發(fā)時,有一種需求是對輸入框(input,textarea)的字?jǐn)?shù)做限制。如果按照J(rèn)S的規(guī)定,字符串里所有的字符,長度都是1。但是有時候我們需要實(shí)現(xiàn)文本框中輸入中文長度是2(或是3),...

    figofuture 評論0 收藏0
  • Web聊天工具的富文本輸入

    摘要:由于我們的富文本輸入框比較簡單,所以只需要處理兩類數(shù)據(jù)即可,其一是普通的文本類型數(shù)據(jù),包括表情其二則是圖片類型數(shù)據(jù)。 最近折騰 Websocket,打算開發(fā)一個聊天室應(yīng)用練練手。在應(yīng)用開發(fā)的過程中發(fā)現(xiàn)可以插入 emoji ,粘貼圖片的富文本輸入框其實(shí)蘊(yùn)含著許多有趣的知識,于是便打算記錄下來和大家分享。 倉庫地址:chat-input-box預(yù)覽地址:https://codepen.io...

    iKcamp 評論0 收藏0
  • 兼顧pc和移動端的textarea數(shù)監(jiān)控的實(shí)現(xiàn)方法

    摘要:一需求闡述和常用的解決方案制作一個文本框限制最大字?jǐn)?shù),實(shí)時監(jiān)聽當(dāng)前已經(jīng)輸入的字?jǐn)?shù),并顯示出來。因此單純的監(jiān)聽事件顯示是不夠的。如果頁面里需要多個文本框都要限制字?jǐn)?shù)如何實(shí)現(xiàn)。 一、需求闡述和常用的解決方案 制作一個文本框限制最大字?jǐn)?shù),實(shí)時監(jiān)聽當(dāng)前已經(jīng)輸入的字?jǐn)?shù),并顯示出來。期初我實(shí)現(xiàn)這個功能的方法很簡單:給textarea控件添加onkeyup事件方法,在方法中將textarea值的長度...

    laznrbfe 評論0 收藏0

發(fā)表評論

0條評論

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