☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Mon Jan 29 16:25:17 2007) 提到:
/* 替换空白 */
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
/* 替换数字头部的零 */
String.prototype.trimz = function() { return this.replace(/^0+(?!\.)/, ''); };
/* 替换(含)2个以上的零 */
String.prototype.trimfullz = function() { return this.replace(/^0{2,}$/, ''); };
/* 验证实数(不为负的整数、零、小数) */
function isRealNumber(input) {
var pattern_1 = /^(\d)+\.(\d{1,2})$/g;
var pattern_2 = /^(\d)+$/g;
if (input.value.trim() == '' || input.value.trimfullz() == '') {
input.value = 0;
return true;
} else if (input.value == '0') {
return true;
} else if (pattern_1.exec(input.value) || pattern_2.exec(input.value)) {
input.value = input.value.trimz();
return true;
} else {
alert('请输入有效数字!');
input.select();
return false;
}
}
验证的时候,输入若是n(n>=2)个0,则被替换为0,例:'00000' -> '0'
其他替换规则如下:
'00235' -> '235'
'02350' -> '2350'
'00.21' -> '0.21'
'00.20' -> '0.20'
IE中正常,Firefox(我的是版本2)中不正常,有时还是间隔的不正常。请大家帮忙看看怎么回事?!谢谢了先!!
☆─────────────────────────────────────☆
KDr2 (Killy Draw) 于 (Mon Jan 29 16:36:09 2007) 提到:
return this.replace(/^0+(?!\.)/, '');
是不是这个正则的问题? /^0+?(!\.)/ 这样看看
你写的东西逻辑真乱,哈哈
【 在 fakeleg (fakeleg) 的大作中提到: 】
: /* 替换空白 */
: String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
: /* 替换数字头部的零 */
: ...................
☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Mon Jan 29 16:56:51 2007) 提到:
(?!是反向前声明。
return this.replace(/^0+(?!\.)/, '');的意思就是替换正整数前头多余的零,以及小数点前面多余的零。并且当小数是类似0.02时,保证不把个位的零也替换掉,否则'00.02'就会变成'.02'而不是'0.02'了。
【 在 KDr2 (Killy Draw) 的大作中提到: 】
: return this.replace(/^0+(?!\.)/, '');
: 是不是这个正则的问题? /^0+?(!\.)/ 这样看看
: 你写的东西逻辑真乱,哈哈
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Mon Jan 29 17:09:39 2007) 提到:
正则不要加g修饰
【 在 fakeleg (fakeleg) 的大作中提到: 】
: /* 替换空白 */
: String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
: /* 替换数字头部的零 */
: ...................
☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Mon Jan 29 17:19:19 2007) 提到:
谢谢,问题解决了,为什么会这样?
【 在 atppp (Big Mouse) 的大作中提到: 】
: 正则不要加g修饰
☆─────────────────────────────────────☆
KDr2 (Killy Draw) 于 (Mon Jan 29 17:22:11 2007) 提到:
g是全局匹配啊,(?!是反向前声明怎么理解啊?谢谢
【 在 fakeleg (fakeleg) 的大作中提到: 】
: 谢谢,问题解决了,为什么会这样?
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Mon Jan 29 17:47:16 2007) 提到:
你用的那个,叫做regular expression literal,你在同一个地方引用,
他只会被初始化一次。偏偏RegExp.exec如果碰到有global修饰的,他会保存
上次匹配的lastIndex以便下次继续匹配,所以你这样搞只有第一次是你想要的
结果,后面再用就不一定是你想要的结果了。正确的方法是每次进函数
都new一个新的RegExp,或者手动设置lastIndex,或者干脆不要用global flag
js真的深究下去,名堂多的很...如果有c功底,很多东西就很好理解了。。。
【 在 fakeleg (fakeleg) 的大作中提到: 】
: 谢谢,问题解决了,为什么会这样?
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Mon Jan 29 17:50:17 2007) 提到:
ps,其实标题应该改成,ie为什么会正常。。。
【 在 fakeleg (fakeleg) 的大作中提到: 】
: 谢谢,问题解决了,为什么会这样?
☆─────────────────────────────────────☆
dev (zz) 于 (Mon Jan 29 20:38:37 2007) 提到:
这个还是用parseFloat方便吧..
【 在 fakeleg (fakeleg) 的大作中提到: 】
: /* 替换空白 */
: String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
: /* 替换数字头部的零 */
: ...................
☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Tue Jan 30 08:57:09 2007) 提到:
十分感谢!!我再找资料看看~
【 在 atppp (Big Mouse) 的大作中提到: 】
: 你用的那个,叫做regular expression literal,你在同一个地方引用,
: 他只会被初始化一次。偏偏RegExp.exec如果碰到有global修饰的,他会保存
: 上次匹配的lastIndex以便下次继续匹配,所以你这样搞只有第一次是你想要的
: ...................
☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Tue Jan 30 09:09:35 2007) 提到:
《JavaScript权威指南(第四版)》187页有相关介绍,看过的都忘了……
【 在 atppp (Big Mouse) 的大作中提到: 】
: 你用的那个,叫做regular expression literal,你在同一个地方引用,
: 他只会被初始化一次。偏偏RegExp.exec如果碰到有global修饰的,他会保存
: 上次匹配的lastIndex以便下次继续匹配,所以你这样搞只有第一次是你想要的
: ...................
☆─────────────────────────────────────☆
fakeleg (fakeleg) 于 (Tue Jan 30 09:50:03 2007) 提到:
精简了一下。
/* 替换空白 */
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
/* 验证实数(不为负的整数、零、小数) */
function isRealNumber(input) {
var pattern_3 = /(^\d\.\d{1,2}$|^[1-9]\d+\.\d{1,2}$|^\d$|^[1-9]\d+$)/g;
if (input.value.trim() == '') {
input.value = 0;
return true;
} else if (pattern_3.exec(input.value)) {
pattern_3.lastIndex = 0;
return true;
} else {
alert('请输入有效数字!');
input.select();
return false;
}
}
☆─────────────────────────────────────☆
qbasic (Alpha 测试) 于 (Mon Feb 5 21:05:01 2007) 提到:
core ~
但是觉得js和c差得好远.越写越觉得远.
【 在 atppp (Big Mouse) 的大作中提到: 】
: 你用的那个,叫做regular expression literal,你在同一个地方引用,
: 他只会被初始化一次。偏偏RegExp.exec如果碰到有global修饰的,他会保存
: 上次匹配的lastIndex以便下次继续匹配,所以你这样搞只有第一次是你想要的
: ...................