为了账号安全,请及时绑定邮箱和手机立即绑定

js字符串长度与获取的问题?

js字符串长度与获取的问题?

蝴蝶刀刀 2019-04-21 20:15:35
js字符串长度与获取的问题当字符串中有中文字符的时候在获取字符以及其长度上会有一定的问题。例如//demo1varstr='谦';console.log(str.length,str.charAt(0))//1谦demo2vars="?";s.length//2返回长度是2s.charAt(0)//''得到空字符串s.charAt(1)//''得到空字符串s.charCodeAt(0)//55362s.charCodeAt(1)//57271从上面可以看出js在处理字符串的时候会有一定的问题,比如长度获取、字符遍历。和常规的获取有一定的不同。问题哪些情况下会出现上诉的问题?出现上诉的问题的原因?如何解决(得到正确的长度以及能够和普通的字符一样遍历不出错)?
查看完整描述

2 回答

?
vip互联

TA贡献1条经验 获得超1个赞

可以先用 正则来判断字符中的中文,然后再计算长度

正则中文匹配:

/^[\u0000-\u00ff]$/

具体的实现方法可以参考这篇文章:

js获取字符串长度

查看完整回答
1 反对 回复 2019-07-26
?
炎炎设计

TA贡献1808条经验 获得超4个赞

1,因为javascript是以utf-16进行编码的,它的长度都是固定的2字节。所以无论是英文字符,还是中文字符还是其他任何字符都会最终转化成16位的编码格式。所以length得到的长度是用来表示该字符的位数来决定的。2,虽然表示英文字符只需要一个字节,但是在javascript中,它是用两个字节表示的,所以length也是1,一般的中文字符是可以通过两个字节表示的,但是有些字,比如"?"超出了两个字节表示的字符范围,所以就用了4个字节,所以对应的length就是2啦3,解决:对于这个问题可以通过
functiongetLen(str){
varlen=str.length;
for(vari=0;ivarcharCode=str.charCodeAt(i);
if(charCode>=0xD800&&charCode<=0xDBFF){
len--;
i++;
}
}
returnlen;
}
参考:unicode与javascript详解
                            
查看完整回答
反对 回复 2019-04-21
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

MDN链接
注意,charCodeAt总是返回一个小于65,536的值。这是因为高位编码单元(highercodepoint)使用一对(低位编码(lowervalued))代理伪字符("surrogate"pseudo-characters)来表示,从而构成一个真正的字符。因此,为了查看或复制(reproduce)65536及以上编码字符的完整字符,不仅需要获取charCodeAt(i)的值,也需要获取charCodeAt(i+1)的值(如同查看/reproducing拥有两个字符的字符串一样)
?的UniCode:U+20BB7,超出常用汉字的Unicode范围了。
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 1149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信