我在 JavaScript 中使用以下函数。
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '', '');
}
此函数替换在我已调用上述函数的 onkeyup
上的 textbox
中输入的任何非数字字符。问题是它也允许这个字符串
1..1
我希望该函数也替换第二个点字符。任何建议都会有帮助。
最佳答案
我不提倡在人们尝试输入字段时简单地修改字段,因为使用这样的简单处理程序很容易干扰他们正在做的事情。 (事后验证,或使用编写良好、经过彻底测试的屏蔽库。)当用户在字段中键入内容时更改字段的值时,您会弄乱插入点的位置,这实际上是/strong> 让用户感到沮丧。但是...
第二次替换可以纠正..
等:
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
时,您都会弄乱用户的插入点,这令人惊讶地令人沮丧。
所以,是的:事后验证,或者使用编写良好、经过彻底测试的屏蔽库。 (如果您使用 jQuery,我很幸运 this jQuery plugin 。)
<小时/>旁注:原始替换中的第二个 ''
是不必要的; replace
仅使用两个参数。
关于javascript - 匹配十进制数字并替换 javascript 中的非数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42502516/