js-字符串长度的验证
今天再一次的遇到了这样一个问题-----关于字符串的字节长度。我想很多表单多会有这样的需求,比如前段我在做baidu输入法官网上传词库和皮肤的时候,因为输入项有字节限制。
?
当然很多网络上早就处理了,今天只是简单地总结记录一下。
?
?
//删除左右两端空格//不同于$.trim()function trim(str){ return str.replace(/(^\s*)|(\s*$)/g, "");}; //计算字符串字节长度//关于这个去空格的需求具体可以变动function getByteLength(str){ var len=0, i, arr = trim(str).split(""); //如果没有需求就改为arr = str.split(""); for(i=0;i<arr.length;i++){ if(arr[i].charCodeAt(0)<299){ len ++; }else{ len +=2; } } return len;}console.log(getByteLength("w的长度是duo少")); //14console.log(getByteLength(" w的长度是duo少 ")); //14?
?
ps:很多有后端学习经验或者数据库经验的人或者对字符集比较有研究的人会提出:汉字不一定是算2个字节,好吧,这边我们只是约定一下,汉字算两个字节?
?
后来写lib库的时候看到tangram是这样处理的
?
?
/**getByteLength get the source byte length in gbk**@function**@param {String} source**@remak {Number}**@remark in gbk length more than 127 is thought two byte**/ZYC.string.getByteLength = function(source){ return String(source).replace(/[^\x00-\xff]/g,"ci").length; //ci是可以换到 当成2个字节的就行};??
ps:这个版本是没有去空格的,在编码为gbk的情况下去计算的。
?
这边随便提一下常见的字符集(来源于http://baike.baidu.com/view/1204863.htm)
?
ASCIIASCII码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。比较EBCDIC。其中95个字符可以显示。另外33个不可以显示。 标准ASCII码为7位,扩充为8位。?