Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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_Regex_Decimal - Fatal编程技术网

十进制数字的Javascript正则表达式-替换非数字和多个小数点

十进制数字的Javascript正则表达式-替换非数字和多个小数点,javascript,regex,decimal,Javascript,Regex,Decimal,我试图将输入限制为十进制数。我希望不显示任何无效字符(不显示然后删除)。我已经实现了这一点,但用于整数(如电话号码的输入),但现在我需要将其应用于十进制输入 样本输入/输出: default value 25.00 -> type 2b5.00 -> display 25.00 default value 265.50 -> type 2.65.50 -> display 265.50 (as if prevented decimal point from being

我试图将输入限制为十进制数。我希望不显示任何无效字符(不显示然后删除)。我已经实现了这一点,但用于整数(如电话号码的输入),但现在我需要将其应用于十进制输入

样本输入/输出:

default value 25.00  -> type 2b5.00  -> display 25.00
default value 265.50 -> type 2.65.50 -> display 265.50 (as if prevented decimal point from being entered)
default value 265.52 -> type 265.52. -> display 265.52 (same as previous one)
结束新编辑

我发现许多线程处理“十进制输入”问题,但几乎99%的线程只处理“匹配”和“测试”输入,而我需要的是替换无效字符

除了尝试许多正则表达式,比如
/^\d+(\.\d{0,2})$/
,我还尝试了下面这样的方法,只保留输入中的第一个匹配项。这仍然不是我的要求,因为我需要保留“原始”小数点,而不是新输入中的第一个小数点。这就是它的代码:

[this.value.slice(0, decimalpoint), '.', this.value.slice(decimalpoint)].join('')
是最接近我需要的,但由于没有回应关于防止多个小数点(这是我的要求)的最后一条评论,它没有用处


任何帮助都将不胜感激。

大纲:找到第一个
,在那里拆分并清洁零件,否则只返回清洁值

function clean(string) {
    return string.replace(/[^0-9]/g, "");
}
var value = "a10.10.0";
var pos = value.indexOf(".");
var result;
if (pos !== -1) {
    var part1 = value.substr(0, pos);
    var part2 = value.substr(pos + 1);
    result = clean(part1) + "." + clean(part2);
} else {
    result = clean(value);
}
console.log(result); // "10.100"

您应该添加一些输入示例和预期的输出,以消除任何歧义。谢谢您的帮助。我添加了几个示例。对于像var value=“aasdf.a10.10.0”这样的值,它会失败;它没有失败。它给出了
.10100
。这是意料之中的。你认为它应该做什么?老实说,我不确定。我觉得应该从第一个数字开始,回答10.10.0谢谢。我试过这个,它在大多数情况下都有效,我不介意它从一个点开始,我可以根据需要填充。有一个问题,是否可以对其进行修改以适用于此示例<代码>默认值265.50->键入2.65.50->显示265.50,因为它给出了
2.6550
。因此,我希望一开始就好像新的小数点不被接受一样。如果要使用最后一个
,请将
indexOf
更改为
lastIndexOf
a10.10.0
将给出
1010.0