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



我在JavaScript中使用以下功能。

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

此功能替换了在textbox上输入的任何非数字字符,我称之为上述函数。问题是它允许此字符串和

1..1

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

我不主张在人们试图输入其中的时候简单地修改字段,这太容易干预他们与这样的简单处理程序的所作所为。(之后验证或使用写得很好的,经过彻底测试的掩蔽库。)当您在用户输入中更改字段的值时,您会弄乱插入点所在的位置,即真的对用户感到沮丧。但是...

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

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

连续替换两个或多个.的单个CC_4。,它仍然允许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时,您都会弄乱用户的插入点,这令人惊讶地令人沮丧。

SO,是的:后来验证,或使用经过详细的,经过彻底测试的掩蔽库。(如果您正在使用jQuery,我很幸运这个jQuery插件。)


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

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

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

相关内容

最新更新