Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配十进制数字并替换javascript中的非数字字符_Javascript_Replace - Fatal编程技术网

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

匹配十进制数字并替换javascript中的非数字字符,javascript,replace,Javascript,Replace,我正在javascript中使用以下函数 function chknumber(a) { a.value = a.value.replace(/[^0-9.]/g, '', ''); } 此函数替换在文本框中输入的任何非数字字符,我已对其调用了上述函数。问题是它也允许这个字符串 1..1 我希望函数也替换第二个点字符。任何建议都会很有帮助。我不主张在人们试图键入字段时简单地修改字段,这样的简单处理程序很容易干扰他们的操作。(事后验证,或使用编写良好、经过彻底测试的掩蔽库。)当用户在键

我正在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, '').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。