我需要更改用户输入并在框中仅保留整数或十进制值,即4567或354.5635。我使用以下声明:
v = v.replace(/[^\d\.]+/g, "");
但是这允许多个小数点,例如345.45.345.67。我如何确保只有一个点?
答案 0 :(得分:4)
v = parseFloat(v).toFixed(numberOfDecimalDigits);
答案 1 :(得分:2)
不确定JS是否可以做前瞻断言,但是如果可以的话可以使用正则表达式,那么JS也可以做反向(input_string)。
需要反向,因为你想要允许FIRST点,然后取出其余部分 但是,搜索从左到右进行。
/(?:[.](?=.*[.])|[^\d.])+/g
将取出除了最后一个'。'之外的所有内容
因此,字符串必须被反转,替换,然后再次反转。
Perl代码示例:
my $ss = 'asdf45.980.765';
$ss = reverse $ss;
$ss =~ s/(?:[.](?=.*[.])|[^\d.])+//g;
$ss = reverse $ss;
print $ss;
输出:45.980765
答案 2 :(得分:0)
我建议在这里使用parseFloat
:
v = parseFloat(v);
这将保证您具有整数/小数值或NaN
。
答案 3 :(得分:0)
v = v.replace(/[A-Za-z$-]/g, "");
// This will replace the alphabets
v = v.replace(/[^\d]*(\d+(\.\d+)?)?.*/g, "$1");
// This will replace other then decimal
答案 4 :(得分:-2)
v = v.replace(/[^\d]*(\d+(\.\d+)?)?.*/g, "$1");