JS字节判断问题, 高手来帮个忙!!! 本帖最后由 dndgkr 于 2009-08-25 15:16:52 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var s=txtbox.value;var mylen=s.len();if (mylen>10){ txtbox.value=s.substr(0,10); txtbox.focus} [Quote=引用 2 楼 toury 的回复:]你的方法对英文输入能起作用。。输入汉字的话不行。mylen > 10 是mylen的byte数 > 10 的话执行下面代码。s.substr(0,10)中10 指的是长度,不是byte数,所以输入的汉字超过10byte符合这个条件。但是下面超过10byte的话保留10byte去掉另外所有的,可是去不掉因为substr(0,10)中10 指的是长度。能否解决次问题啊??? 汗~~确实是疏忽了,向LZ道歉~这样:String.prototype.len = function() { return this.replace(/[^\x00-\xff]/g, 'xx').length;} var s="ascd无论字母还是汉字的字符串分解"//txtbox.value;var mylen=s.len(); if (mylen>10){ a=s.substr(0,10).split("");//把这10个无论字母还是汉字的字符串分解 re=/[^\x00-\xff]/g; var t=0; for (var i=0;i<a.length;i++){ t=re.test(a[i])?(10-t-2):(10-t-1) }alert(s.substr(0,10-t))} String.prototype.len = function() { return this.replace(/[^\x00-\xff]/g, "xx").length;};String.prototype.left = function(length) { return this.slice(0, length);};String.prototype.leftB = function(length) { var len, str = this.left(length); while ((len = str.len()) > length) str = str.left(str.length - (len - length)/2); return str;};var str = "无a论字母还是汉字的字符串分解";alert(str.leftB(10)); 加一个onfocus=saveOldValue(this.value) onchange=checkLenth(this.value)var oldvalue;var inerr = false;function saveOldValue(e){ if(inerr == false){ oldvalue = e.value; }else{ inerr = false; } return true;}function checkLenth( textObj ){ var n =textObj.len(); if(n > 10 || n==0 ){ alert( "错误" ); textObj.value = oldvalue; textObj.focus(); return; }}String.prototype.len = function() { return this.replace(/[^\x00-\xff]/g, 'xx').length; } 不好意思,写错了,是 onfocus=saveOldValue(this) onchange=checkLenth(this);function checkLenth( textObj ){ var n =textObj.value.len(); if(n > 10 || n==0 ){ alert( "错误" ); textObj.value = oldvalue; textObj.focus(); return; }} ajax返回结果后重试执行 各位高手求教...思路。思路。。给最高分。。 js赋值,如果有两个或者以上重复的ID怎么办? JavaScript对象的调用 达人帮忙解疑 iframe高度问题 这段 JQUERY 代码,怎么执行不了? 关于在js中打开windows文件夹选择框? [数组排序问题]xdjm们来帮忙呀~~~ 请教函数参数的问题 关于打印的一个不错的设想 <script 中企给的代码 看不懂 超级难的问题??!!!!!!
var mylen=s.len();
if (mylen>10){
txtbox.value=s.substr(0,10);
txtbox.focus
}
你的方法对英文输入能起作用。。
输入汉字的话不行。
mylen > 10 是mylen的byte数 > 10 的话执行下面代码。
s.substr(0,10)中10 指的是长度,不是byte数,所以输入的汉字超过10byte符合这个条件。
但是下面超过10byte的话保留10byte去掉另外所有的,
可是去不掉因为substr(0,10)中10 指的是长度。
能否解决次问题啊???
这样:String.prototype.len = function() {
return this.replace(/[^\x00-\xff]/g, 'xx').length;
} var s="ascd无论字母还是汉字的字符串分解"//txtbox.value;
var mylen=s.len();
if (mylen>10){
a=s.substr(0,10).split("");//把这10个无论字母还是汉字的字符串分解
re=/[^\x00-\xff]/g;
var t=0;
for (var i=0;i<a.length;i++){
t=re.test(a[i])?(10-t-2):(10-t-1)
}
alert(s.substr(0,10-t))
}
String.prototype.len = function() {
return this.replace(/[^\x00-\xff]/g, "xx").length;
};String.prototype.left = function(length) {
return this.slice(0, length);
};String.prototype.leftB = function(length) {
var len, str = this.left(length);
while ((len = str.len()) > length)
str = str.left(str.length - (len - length)/2);
return str;
};
var str = "无a论字母还是汉字的字符串分解";alert(str.leftB(10));
var oldvalue;
var inerr = false;
function saveOldValue(e){
if(inerr == false){
oldvalue = e.value;
}else{
inerr = false;
}
return true;
}
function checkLenth( textObj ){
var n =textObj.len();
if(n > 10 || n==0 ){
alert( "错误" );
textObj.value = oldvalue;
textObj.focus();
return;
}
}
String.prototype.len = function() {
return this.replace(/[^\x00-\xff]/g, 'xx').length;
}
var n =textObj.value.len();
if(n > 10 || n==0 ){
alert( "错误" );
textObj.value = oldvalue;
textObj.focus();
return;
}
}