当前位置: 首页 > Web前端 > HTML5

如何计算表情文字的字数?而输入框限制了指定的字符数?

时间:2023-04-05 22:26:39 HTML5

如何使用javascript正确计算表情符号文本的文本长度?最容易想到的自然是用length求长度。下面列出了常见的表情符号和复杂的表情符号。//size:2"?".length//size:7"????".length由于JavaScript的字符编码问题,自然不行。有关详细信息,请参阅文章末尾的博客文章。基于常见的表情符号,可以使用以下正则匹配。//匹配UTF-16的代理对,将代理对改为BMP字符returnstring.replace(regexAstralSymbols,'_').length;}countSymbols("?");//大小:1countSymbols("????");//size:4但是还有一个问题。然后当一些比较复杂的emoji表情的时候,还是挂了。????这个表情其实是苹果的表情农夫,全表情包v5.0中的第218个表情。这个表情符号由U+1F468U+1F3FCU+200DU+1F33E组成。所以直接长度为2+2+1+2=7。这是必然的。那么如何解决呢?这时候社区里就有了twemoji,一个关于twitteremoji的工具库。使用这个工具库,你可以轻松实现emoji文字的实现。twemoji.parse("????")//""因此可见。twemoji被正确识别并符合我们的预期。用户随便输入一个表情,我们只算一个长度。利用twemoji解析emoji返回图片的特性,结合正则表达式可以实现一个功能。functioncountSymbols(string){returntwemoji.parse(string).replace(//g,'_').length;}countSymbols("?");//大小:1countSymbols("????");//size:1好的,问题解决了。文本计算函数countSymbols("????and?parsecorrectly!");//size:24其实解决了字符计算之后,就很容易限制输入框的字符数了。思路是每次发生输入事件时,先判断当前字符数是否超过限制,如果超过则将当前输入框的文字替换为之前的文字。一般代码如下。varprevText='';vartextarea=document.getElementById('input-area');varlimit=250;functionlimitTextSize(){vartext=textarea.value;varsize=countSymbols(文本);if(size>limit){textarea.value=prevText;}else{prevText=text;}}希望它能对你有所帮助。求赞哈哈~Unicode和JavaScript详解Emoji.prototype.length——Unicode字符那些东西JavaScript有一个Unicodesinkhole