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

标签 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 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('')

This thread是最接近我需要的,但是由于没有对关于防止多个小数点(这是我的要求)的最后一条评论做出回应,所以它没有用。

如有任何帮助,我们将不胜感激。

最佳答案

大纲:找到第一个 .,在那里拆分并清理这些部分,否则只返回清理后的值。

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"

关于十进制数的 Javascript 正则表达式 - 替换非数字和多于一位的小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709938/

相关文章:

javascript - Jquery 在 Knockout Js 中选择等效项

javascript - 基于ID的多维数组中的对象未被删除-Angular 4/Ionic 3

regex - 为什么 sed 打印所有行?

python无法将非常小的小数转换为日志

C# 将小数安全地转换为 int

javascript - 从字符串 javascript 中删除注释的最有效方法

javascript - 根据文件输入状态运行函数

regex - 用于从 RTF 字符串中提取文本的正则表达式

regex - vim 缩写和正则表达式

binary - 如何将 64 位二进制字符串转换为 tcl 中的十进制数?