我有这样的输入代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
</script>
</head>
<body>
<input type="text" maxlength="11" class="text-right number inputMust" onkeyup="value=value.replace(/\d{11}+|^\d{1,4}\.\d{1,4}?$/g,'')"/>
</body>
</html>
我希望输入允许最多11位整数和最多4位十进制吗?
如果输入的不是整数或十进制,请替换其他字符。
如果输入为“ 0000000”,则这样的字符串0,仅保留一个0。
允许这些格式:
123456.1234
1.23
12.3456
12.3456
1234567890
123456
12
0
不允许这些格式:
123456.12345
12345.1234564
12.3456789
12345678901234
1234567890.12
12.12345
123.123456
如何解决此onkeyup="value=value.replace(/\d{11}+|^\d{1,4}\.\d{1,4}?$/g,'')"
答案 0 :(得分:1)
我现在知道该怎么做:
$(".fourDigit").keyup(function(e) {
var ele = e.target;
val = ele.value;
ret = val.replace(/[^\d\.]/g, '');
ret = /[^\.]{0,}(\.\d{0,4})?/g.exec(ret);
if(ret){
ret = ret[0];
}
ret = ret.replace(/^0+/g, '0');
ret = ret.replace(/^\.+/, '');
ret = ret.substring(0, 11);
ele.value = ret;
});
答案 1 :(得分:0)
如果我没记错的话,您可以使用 toFixed()
var fixedToFourDecimals = floatValue.toFixed(4);
如果要验证用户输入,可以将toFixed()值与原始答案进行比较。
但是,如果您仍然想使用正则表达式,请执行Regular expression to enforce 2 digits after decimal point 它使用2小数而不是4,但是会为您提供很好的参考。
答案 2 :(得分:0)
还要检查是否为float并使用本地小数点分隔符。
function localDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
function limitInput(element) {
let value = parseFloat(element.value);
if (!value) element.value = '';
else {
const decimal = localDecimalSeparator();
let str = value.toString();
let strSpl = str.split(decimal);
if (strSpl.length > 1 && strSpl[1].length > 4) strSpl[1] = strSpl[1].substring(0, 4);
if (element.value.indexOf(decimal) > -1) {
strSpl[0] = strSpl[0] + decimal;
str = strSpl.join('');
}
if (str.length > 10 + strSpl.length) str = str.substring(0, 10 + strSpl.length);
element.value = str;
}
}
<input type="text" onkeyup="limitInput(this);" />