我在javascript中使用以下函数。
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '', '');
}
此函数替换在textbox
我已调用上述函数的onkeyup
中输入的任何非数字字符。问题是它允许这个字符串
1..1
我希望该函数也替换第二个点字符。任何建议都会有所帮助。
答案 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];
}