写一个通用方法,限制几位都可以
<input type="text" id="numberInput" oninput="limitDecimalPlaces(this, 3)">
function limitDecimalPlaces(input, decimalPlaces) {
// 正则表达式,允许整数部分和小数点后最多decimalPlaces位数字
// 这里的正则表达式假设输入总是有效的(即,用户不会直接输入非数字字符),
// 但为了健壮性,我们还是加入了对非数字字符的清理。
const regex = new RegExp(`^\\d*(\\.\\d{0,${decimalPlaces}})?$`);
// 获取当前值,并移除任何非数字字符(除了点和数字)
let value = input.value.replace(/[^\d.]/g, '');
// 如果值以点开头,在前面添加一个0(可选,取决于你的需求)
if (value.startsWith('.')) {
value = '0' + value;
}
// 使用正则表达式检查值
if (!regex.test(value)) {
// 如果值不符合规则,则截断到小数点后decimalPlaces位
let parts = value.split('.');
if (parts[1]) {
parts[1] = parts[1].substring(0, decimalPlaces);
}
value = parts.join('.');
}
// 更新输入框的值
input.value = value;
}
// 注意:这个实现假设用户输入是逐步进行的,并且不会直接粘贴不符合规则的字符串。
// 如果需要处理粘贴事件,你可能还需要监听`paste`事件并相应地处理它。