匹配十进制数字并替换javascript中的非数字字符
我正在javascript中使用以下函数匹配十进制数字并替换javascript中的非数字字符,javascript,replace,Javascript,Replace,我正在javascript中使用以下函数 function chknumber(a) { a.value = a.value.replace(/[^0-9.]/g, '', ''); } 此函数替换在文本框中输入的任何非数字字符,我已对其调用了上述函数。问题是它也允许这个字符串 1..1 我希望函数也替换第二个点字符。任何建议都会很有帮助。我不主张在人们试图键入字段时简单地修改字段,这样的简单处理程序很容易干扰他们的操作。(事后验证,或使用编写良好、经过彻底测试的掩蔽库。)当用户在键
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '', '');
}
此函数替换在文本框
中输入的任何非数字字符,我已对其调用了上述函数。问题是它也允许这个字符串
1..1
我希望函数也替换第二个点字符。任何建议都会很有帮助。我不主张在人们试图键入字段时简单地修改字段,这样的简单处理程序很容易干扰他们的操作。(事后验证,或使用编写良好、经过彻底测试的掩蔽库。)当用户在键入字段时更改字段的值时,插入点的位置会出错,这对用户来说确实是一件令人沮丧的事情。但是 第二次更换可以纠正
。
,例如:
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '').replace(/\.{2,}/g, '.');
}
将一行中的两个或多个
替换为一个但是,它仍然允许1.1.1
,这可能是您不想要的。遗憾的是,JavaScript没有lookbehind,因此我们进入了更多的逻辑:
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,那么我很幸运。)
旁注:原始替换中的第二个
'
是不必要的replace
只使用两个参数。我不主张在人们试图键入字段时简单地修改字段,这太容易干扰他们使用这样的简单处理程序所做的事情。(事后验证,或使用编写良好、经过彻底测试的掩蔽库。)当用户在键入字段时更改字段的值时,插入点的位置会出错,这对用户来说确实是一件令人沮丧的事情。但是
第二次更换可以纠正。
,例如:
function chknumber(a) {
a.value = a.value.replace(/[^0-9.]/g, '').replace(/\.{2,}/g, '.');
}
将一行中的两个或多个
替换为一个但是,它仍然允许1.1.1
,这可能是您不想要的。遗憾的是,JavaScript没有lookbehind,因此我们进入了更多的逻辑:
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,那么我很幸运。)
旁注:原始替换中的第二个
'
是不必要的replace
仅使用两个参数。如果您的输入为“sajan12paul34.22
”,则match函数将返回一个包含[12,34.22]的数组。
数组索引[0]用于获取第一个数值(12)
如果您的输入为“
sajan12paul34.22
”,请尝试使用match方法。match函数将返回一个包含[12,34.22]
数组索引[0]用于获取第一个数值(12)
这仅适用于一行中的两个或多个
。要匹配十进制数,它应该在第一次出现后替换所有的
。@SanchayKumar:没错。我太专注于问题的实质,而不是他们明显的总体意图。遗憾的是,JavaScript没有lookbehind,这将使它变得如此简单…@SanchayKumar:现在更新了它,但我仍然认为这是一个错误的方法开始…:-)谢谢,成功了。是的,我同意我应该事后验证。所以我将调用这个函数onblur。这只适用于两个或更多的
行。要匹配十进制数,它应该在第一次出现后替换所有的
。@SanchayKumar:没错。我太专注于问题的实质,而不是他们明显的总体意图。遗憾的是,JavaScript没有lookbehind,这将使它变得如此简单…@SanchayKumar:现在更新了它,但我仍然认为这是一个错误的方法开始…:-)谢谢,成功了。是的,我同意我应该事后验证。我将这个函数称为onblur。