【问题标题】:Accept value greater than zero and the value can be even 0.01 or 0.10接受大于零的值,该值甚至可以是 0.01 或 0.10
【发布时间】:2015-09-15 04:31:20
【问题描述】:

我有一个方法,我尝试验证该值,该值可以是任何值但不应该是zero

function change(){
    var bill= document.getElementById("myTextField")
    var RE = /^(?!^0*$)(?!^0*\.0*$)^\d{1,2}(\.\d{1,2})?$/;
    if(RE.test(bill)){
       alert("True");
    }else{
      alert("False");
    }    
}

JSD FIDDLE DEMO

但是即使我输入正确的值也会返回 false。

the minimum value should be greater than 0 and maximum value is 99999.99

【问题讨论】:

  • 这是一个令人印象深刻的正则表达式,但为什么不将值转换为浮点数并进行测试呢?
  • @HeadCode 你能举一些例子吗?

标签: javascript regex validation decimalformat


【解决方案1】:

回答正确的人有点离题,但将值转换为浮点数并进行测试可能更容易。

function change(){
    var stBill = document.getElementById("myTextField").value;
    var num = parseFloat(stBill, 10);
    if(num > 0 && num <= 99999.99){
        alert("True");
    }else{
        alert("False");
    }
}

【讨论】:

    【解决方案2】:

    您无法针对正则表达式测试输入元素对象本身的stBill。您需要测试它的值:

    RE.test(stBill.value)
    

    【讨论】:

      【解决方案3】:

      尝试修复

      RE.test(stBill.value)
      

      var stBill = document.getElementById("myTextField").value;
      

      你应该寻找价值而不是元素。 :)

      【讨论】:

        【解决方案4】:
        function change(){
            var stBill = Math.round(document.getElementById("myTextField").value * 100)/ 100;
            var RE = /^(?!^0*$)(?!^0*\.0*$)^\d{1,2}(\.\d{1,2})?$/;
            if(RE.test(stBill)){
               alert("True");
            }else{
              alert("False");
            }       
        }
        

        测试值不是元素,你选择的是元素而不是它的值

        Demo Fiddle

        【讨论】:

        • 我不明白为什么这是有效的,这没有任何意义.. 如果大于 0.99 则为 0.989 !!
        • @decebal 我已经更新了答案和小提琴并应用了舍入
        猜你喜欢
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多