我在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];
}