【问题标题】:Regular Expression in JavaScript to allow only numbers with optional 2 decimalsJavaScript 中的正则表达式只允许带有可选 2 位小数的数字
【发布时间】:2014-01-18 11:53:34
【问题描述】:

我想写一个正则表达式,允许

  1. 退格
  2. 0-9 位
  3. 带两位小数的可选小数部分(整数部分可以有多少位数没有限制)

例如:

  • 允许的列表是 [12 , 232.0 , 23.(只有点) , 345.09 , 78.23 , 134.00 , 0.21 , .21 , .02 , .01 .12 ]​​i>
  • 不允许的是 [12.878 , 34.343.334 , .0003 ]​​i>

这个正则表达式的使用就像在 javascript 事件中一样

<input type="text"  onKeyPress="validatenumber(event);"   /><br>

我的代码是

function validatenumber(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /^[0-9\b]+$/;    // allow only numbers [0-9] 
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

我只想用新的正则表达式更改这一行:

var regex = /^[0-9\b]+$/;    // allow only numbers [0-9]

【问题讨论】:

  • .10.1 是否有效?
  • .1 和 0.1 都是允许的

标签: javascript jquery regex


【解决方案1】:

这里是:

/^\d*(?:\.\d{1,2})?$/

工作演示:http://jsfiddle.net/qd7BL/

【讨论】:

  • 先生,如果您给我提供 onkeypress 的工作示例,我将非常感谢您。我的意思是,如果用户按下允许字符以外的键,如果允许在文本框中写入,则什么也不做
  • 表示事件有效数(事件)
  • 函数 validatenumber(evt) { var theEvent = evt ||窗口.事件; var key = theEvent.keyCode || theEvent.which; key = String.fromCharCode(key); var 正则表达式 = /^[0-9]*(?:\.\d{1,2})?$/; if(!regex.test(key)) { theEvent.returnValue = false; if(theEvent.preventDefault) theEvent.preventDefault(); } } 它可以工作并允许退格和数字,但不允许句点(。)
【解决方案2】:

至少找到最终解决方案

<input id="txtId" type="text" onkeyup="NumAndTwoDecimals(event , this);"></input>

 function NumAndTwoDecimals(e , field) {
    var val = field.value;
    var re = /^([0-9]+[\.]?[0-9]?[0-9]?|[0-9]+)$/g;
    var re1 = /^([0-9]+[\.]?[0-9]?[0-9]?|[0-9]+)/g;
    if (re.test(val)) {
        //do something here

    } else {
        val = re1.exec(val);
        if (val) {
            field.value = val[0];
        } else {
            field.value = "";
        }
    }
}

【讨论】:

    【解决方案3】:

    这个正则表达式怎么样:

    ^\d*(?:\.\d\d)?$
    

    【讨论】:

    • 这匹配一个空字符串
    • function validatenumber(evt) { var theEvent = evt || window.event; var key = theEvent.keyCode || theEvent.which; key = String.fromCharCode( key ); var regex =/^\d*(?:\.\d\d)?$/; if( !regex.test(key) ) { theEvent.returnValue = false; if(theEvent.preventDefault) theEvent.preventDefault(); } }&lt;input type="text" onKeyPress="validatenumber(event);" /&gt;@M42
    • @user3132930:代码没问题,但是key 的哪些值不匹配?
    • @M42 不匹配的值为 [ period(.) ]
    • @user3132930:我不明白你。请给出不匹配的key。除非我忘记了什么,否则您给出的值 [ period(.) ] 不应该匹配。
    【解决方案4】:

    下面这个简单的 html 代码将验证所需的值以及 +ve 和 -ve 至少 1 位数字以及可选的小数点后 2 位数字。

    JS 代码:

            function validateNum() {
    
                /*
                For mandatry input field, use variable: "patForReqdFld".
                For optional input filed, use variable: "patForOptFld".
                */
    
                var patForReqdFld = /^(\-)?([\d]+(?:\.\d{1,2})?)$/;
                var patForOptFld = /^(\-)?([\d]*(?:\.\d{1,2})?)$/;
    
                var value = document.getElementById('txtNum').value;
    
                if(patForReqdFld.test(value)) {
                    alert('Valid Number: ' + value);
                } else {
                    alert('Invalid Number: ' + value);
                }
            }
    

    HTML 代码:

            <label>Enter Number:&nbsp;</label>
            <input type="text" id="txtNum" onBlur="validateNum()"/>
    

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2012-12-21
      • 1970-01-01
      • 2021-07-26
      • 2017-06-18
      相关资源
      最近更新 更多