如何使用正则表达式保留四位数的小数位数?

时间:2018-08-17 04:25:36

标签: javascript jquery regex

我有这样的输入代码:

<!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,'')"

3 个答案:

答案 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);" />