验证表单长度时 .length 汉字和英文字符 一样。。应该怎么区分。
1个回答
展开全部
首先你要知道,.length得到的是字符长度,不是字节长度,一个汉字和一个英文字符都是算一个字符的;
其次,在不同编码格式的网页中,汉字占用的字节是不同的,比如在GB2312中汉字是2个字节,而在UTF-8编码格式中汉字可以是2个字节,也可能是3个字节,甚至在iso-8859-1编码中汉字是5个字节的!
所以要根据不同的编码来计算:
比如在GB2312中:
function getByteForGB(s)
{
return s.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length;
}
在UTF-8中:
function getByteForUTF(s)
{
a=s.replace(/[\u0000-\u007f]/g, "\u0061");
b=a.replace(/[\u0080-\u07ff]/g, "\u0061\u0061");
c=b.replace(/[\u0800-\uffff]/g, "\u0061\u0061\u0061");
return c.length;
}
其次,在不同编码格式的网页中,汉字占用的字节是不同的,比如在GB2312中汉字是2个字节,而在UTF-8编码格式中汉字可以是2个字节,也可能是3个字节,甚至在iso-8859-1编码中汉字是5个字节的!
所以要根据不同的编码来计算:
比如在GB2312中:
function getByteForGB(s)
{
return s.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length;
}
在UTF-8中:
function getByteForUTF(s)
{
a=s.replace(/[\u0000-\u007f]/g, "\u0061");
b=a.replace(/[\u0080-\u07ff]/g, "\u0061\u0061");
c=b.replace(/[\u0800-\uffff]/g, "\u0061\u0061\u0061");
return c.length;
}
追问
...function部分看不懂啊。。。能否解释一下
追答
就是把汉字用同等字节的字符a替换,这样得出的length就是实际字节数了
比如
百度baidu(length为7)
转换为
aaaabaidu(length为9)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询