全角半角字符混合输入的处理
问题1:输入长度的验证,例如输入内容在数据库中是40字节,所以输入长度不能超过40字节;而JavaScript中的String.length获得的是字符个数。
解决方法:通常全角字符为2字节,而半角字符为1字节;这样String.length获得的长度相当于将全角字符作为1字节处理,所以再加上全角字符的个数就是字节数。考虑到escape()函数处理的字符串中,全角字符都转换成%uXXXX的Unicode形式,可以由此统计出字符串中的全角字符个数。
下面的JavaScript代码扩展了String对象,用来获取字符串的字节数
问题2:由于显示空间有限,要求显示内容按指定长度(字节数)截取,这里有全角字符的前一个字节在指定长度范围里的问题。
解决方法:从字符串后端开始,逐个删除字符,直到字符串字节数<=指定长度字节数。
下面的JavaScript代码扩展了String对象,实现了上面的截取方法
String.prototype.removeCharAt = function (index) {
var retStr = this;
if (index <= this.length) {
if (index === 0) {
retStr = this.substring(1);
} else {
if (index == this.length - 1) {
retStr = this.substring(0, this.length - 1);
} else {
retStr = this.substring(0, index) + this.substring(index + 1);
}
}
}
return retStr;
};
String.prototype.intercept = function (length) {
var s = this;
var len = s.getBytesLength();
while (len > length) {
s = s.removeCharAt(s.length - 1);
len = s.getBytesLength();
}
return s;
};
以上文章转至nelson_tu的文章【实用技巧Web篇(4)】
问题1:输入长度的验证,例如输入内容在数据库中是40字节,所以输入长度不能超过40字节;而JavaScript中的String.length获得的是字符个数。
解决方法:通常全角字符为2字节,而半角字符为1字节;这样String.length获得的长度相当于将全角字符作为1字节处理,所以再加上全角字符的个数就是字节数。考虑到escape()函数处理的字符串中,全角字符都转换成%uXXXX的Unicode形式,可以由此统计出字符串中的全角字符个数。
下面的JavaScript代码扩展了String对象,用来获取字符串的字节数
String.prototype.getBytesLength = function () {
return this.length + (escape(this).split("%u").length - 1);
};
问题2:由于显示空间有限,要求显示内容按指定长度(字节数)截取,这里有全角字符的前一个字节在指定长度范围里的问题。
解决方法:从字符串后端开始,逐个删除字符,直到字符串字节数<=指定长度字节数。
下面的JavaScript代码扩展了String对象,实现了上面的截取方法
String.prototype.removeCharAt = function (index) {
var retStr = this;
if (index <= this.length) {
if (index === 0) {
retStr = this.substring(1);
} else {
if (index == this.length - 1) {
retStr = this.substring(0, this.length - 1);
} else {
retStr = this.substring(0, index) + this.substring(index + 1);
}
}
}
return retStr;
};
String.prototype.intercept = function (length) {
var s = this;
var len = s.getBytesLength();
while (len > length) {
s = s.removeCharAt(s.length - 1);
len = s.getBytesLength();
}
return s;
};
以上文章转至nelson_tu的文章【实用技巧Web篇(4)】