我试图将输入限制为十进制数。我希望根本不显示任何无效字符(不显示然后删除)。我已经实现了这个但是对于整个整数(比如电话号码的输入)但现在我需要将它应用于十进制输入。
示例输入/输出:
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是最接近我需要的,但由于对最后一条关于防止多个小数点的评论没有回应(这是我的要求),所以没用。
任何帮助都将不胜感激。
答案 0 :(得分:2)
大纲:找到第一个.
,在那里拆分并清理部分,否则只返回清理后的值。
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"