2015-09-15 31 views
-1

我有一个方法中,我尝试验证值和值可以是任何东西,但不应该是zero接受值大于零值甚至可以0.01或0.10

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 
+2

这是一个令人印象深刻的正则表达式,但为什么不只是将值转换为浮点数并测试它呢? – HeadCode

+0

@HeadCode你会举一些例子吗? – SAR

回答

1
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

OMG!,我做了多么愚蠢的错误,并且非常感谢这个...... – SAR

+0

我看不出为什么会这样有效,它没有任何意义..它说0.989如果大于0.99! – decebal

+0

@decebal我已更新答案和小提琴和应用四舍五入 – Rex

1

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

RE.test(stBill.value) 
+0

OMG!,我做了多么愚蠢的错误,并且非常感谢... – SAR

1

尝试固定

RE.test(stBill.value) 

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

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

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"); 
    } 
}