我在javascript中使用以下函数。匹配一个十进制数字并替换javascript中的非数字字符
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '', '');
}
此函数替换在textbox
上,其onkeyup
我已要求上述函数输入的任何非数字字符。问题是它允许这个字符串以及
1..1
我希望该函数也可以替换第二个点字符。任何建议都会有所帮助。
我在javascript中使用以下函数。匹配一个十进制数字并替换javascript中的非数字字符
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '', '');
}
此函数替换在textbox
上,其onkeyup
我已要求上述函数输入的任何非数字字符。问题是它允许这个字符串以及
1..1
我希望该函数也可以替换第二个点字符。任何建议都会有所帮助。
我不主张在人们试图输入时简单地修改字段,而是用这样的简单处理程序来干涉他们正在做的事情,这很容易。 (之后进行验证,或者使用一个编写良好,经过全面测试的屏蔽库。)当用户输入字段时更改字段的值时,会搞乱插入点的位置,这就是确实令人沮丧用户。但是......
第二更换可以纠正..
和这样的:
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '').replace(/\.{2,}/g, '.');
}
,取代两连胜更.
有一个。 但是,它仍然允许1.1.1
,你可能不想要。可悲的是,JavaScript没有lookbehinds,所以我们进入更多的逻辑:
function chknumber(a) {
var str = a.value.replace(/[^0-9.]/g, '').replace(/\.{2,}/g, '.');
var first, last;
while ((first = str.indexOf(".")) !== (last = str.lastIndexOf("."))) {
str = str.substring(0, last) + str.substring(last+1);
}
if (str !== a.value) {
a.value = str;
}
}
不能保证不会有其他边缘情况和这样的,又一次,每次分配的替代a.value
,你将会弄乱用户的插入点,这令人惊讶地令人沮丧。
所以,是的:后来验证,或者使用一个写得很好,经过全面测试的掩蔽库。 (我有好运气this jQuery plugin,如果你使用jQuery)
边注:在您的原始替换第二''
是不必要的; replace
只使用两个参数。
尝试匹配方法如果输入是“sajan12paul34.22
”的匹配函数将返回一个数组包含[12 , 34.22]
数组索引[0]被用于获取第一数字值(12)
function chknumber(a) {
a.value = a.value.match(/[0-9]*\.?[0-9]+/g)[0];
}
这仅仅是连续两个或更多'.'。要匹配十进制数字,它应该在第一次出现后替换所有'.'。 –
@SanchayKumar:的确如此。我太专注于实际问题的内容,而不是其明显的总体意图。可悲的是,JavaScript没有后视,这将使它变得如此简单... –
@SanchayKumar:现在更新它,但我仍然认为这是错误的方法,以...开头:-) –