匹配十进制数并替换javascript中的非数字字符

时间:2017-02-28 07:20:35

标签: javascript replace

我在javascript中使用以下函数。

function chknumber(a) {
    a.value = a.value.replace(/[^0-9.]/g, '', '');
}

此函数替换在textbox我已调用上述函数的onkeyup中输入的任何非数字字符。问题是它允许这个字符串

1..1

我希望该函数也替换第二个点字符。任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:1)

我并不主张在人们试图输入字段时简单地修改字段,这很容易干扰他们用这样的简单处理程序做的事情。 (之后验证,或者使用编写良好,经过彻底测试的掩蔽库。)当用户输入字段时更改字段的值时,插入点就会陷入困境,这是真的< / strong>令用户感到沮丧。但...

第二次替换可以纠正..等等:

function chknumber(a) {
    a.value = a.value.replace(/[^0-9.]/g, '').replace(/\.{2,}/g, '.');
}

用一个替换两个或更多.行。 但是,它仍然会允许您1.1.1,这可能是您不想要的。遗憾的是,JavaScript没有外观,所以我们进入更多的逻辑:

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时,您都会弄乱用户的插入点,这令人惊讶地令人沮丧。

所以,是的:之后验证,或者使用编写良好,经过全面测试的掩蔽库。 (如果您正在使用jQuery,我已经和this jQuery plugin好运了。)

旁注:原始替换中的第二个''是不必要的; replace只使用两个参数。

答案 1 :(得分:1)

如果输入为&#34; sajan12paul34.22&#34;请尝试使用匹配方法match函数将返回一个包含[12 , 34.22]的数组 数组索引[0]用于获取第一个数值(12)

function chknumber(a) {
    a.value = a.value.match(/[0-9]*\.?[0-9]+/g)[0];
}