检查小数点前的4个数字和小数点后的1个数字

时间:2016-07-01 16:02:18

标签: javascript regex

我有一个输入数字字段,它应该允许十进制前最多4个数字和十进制后最多1个数字或最多6个不带小数的数字。 例如。有效期为1.2,113.5,1234.5,456789。

我在按键上使用了这个RegEx ^\d{0,4}\.?(\.\d{0,1})?$。它工作正常,但只有在显示113.55这样的数字后才会出错。我该如何解决这个问题?

我的Keypress功能:

函数OnKeyPress(e,DivID){

            if ( e.which != 8 && e.which != 0  && e.which != 13 && e.which != 46 && (e.which < 48 || e.which > 57)) {
                        return false;
            }

            var val = j$('[id$='+DivID+']').val();


            if(DivID == 'ProximityCPPercentage')
            {
                var x = event.which || event.keyCode;
                if(val.indexOf('.') >= 0 && e.which == 46)
                    return false;
                else if(e.which == 46 && val.length == 3)
                    return false;
                if(val.indexOf('.') == 0)
                    val = '0' + val;
                if(e.which != 46)
                {                        
                    strval = val + String.fromCharCode(x);
                    var re = /^((.|0|[1-9]\d?)(\.\d{1})?|100(\.0?)?)$/;
                    if(!re.test(strval))
                        return false;
                }
            }              
            else if(val.indexOf('.') > 0)
            {
                if(e.which == 46 )
                    return false;
                var arra = val.split('.');
                var decval = arra[1];

                var val = arra[0];
                if(val.length > 6)
                    return false;
                if(decval.length > 0)
                    return false;                        
            }                
            else if(e.which != 46 )
            {
                if(val.length > 5)

                    return false;
            }

        }

2 个答案:

答案 0 :(得分:3)

使用以下正则表达式

^\d{0,4}([.\d]\d)?$

Regex explanation here

Regular expression visualization

如果您不想匹配5位数,请使用negative look-ahead assertion来避免

^(?!\d{5}$)\d{0,4}([.\d]\d)?$

Regex explanation here

Regular expression visualization

答案 1 :(得分:2)

/^(?:\d{0,4}\.?(\d)|\d{0,6})?$/

注意:这也匹配.212345以及''(空字符串)。根据您的问题,您不清楚是否要排除这些问题。

说明:

  1. ^开始行。
  2. (?:启动&#34;非捕获组&#34;。
  3. \d{0,4}介于0到4位之间。
  4. \.?零或一个字面点。
  5. (\d)捕获一位数字。 (你想要抓住它吗?)
  6. |
  7. \d{0,6}零或六位数。
  8. )关闭我们的非捕获组(号码 2 )。
  9. $结束这条线。
  10. 试验:

    var reg_exp = /^(?:\d{0,4}\.?(\d)|\d{0,6})?$/;
    [
      '1.2',
      '113.5',
      '1234.5',
      '456789',
      '12345',
      '.2',
      '',
      '1234.',
      '113.55'
    ].forEach(c => {
      console.log('"' + c + '" tests to "' + reg_exp.test(c) + '"');
    });
    
    // "1.2" tests to "true"
    // "113.5" tests to "true"
    // "1234.5" tests to "true"
    // "456789" tests to "true"
    // "12345" tests to "true"
    // ".2" tests to "true"
    // "" tests to "true"
    // "1234." tests to "false"
    // "113.55" tests to "false"