我的表单中有一个价格字段我应该只允许小数或浮点数,而不是我的价格字段中的字符和任何其他特殊和空格。
我怎么能得到它?
这是我的代码:
$("#foo").blur(function() {
var price = $("#foo").value;
var validatePrice = function(price) {
return /^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/.test(price);
}
alert(validatePrice(price)); // False
});
答案 0 :(得分:6)
首先,这是更正后的代码:
$("#foo").blur(function() {
var price = $("#foo").val();
var validatePrice = function(price) {
return /^(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(price);
}
alert(validatePrice(price)); // False
});
您需要分别测试空值(未定义)。此外,如果要允许负值,请使用:
/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(price);
这个正则表达式取自JörnZaefferer的JQuery Validate插件。我建议您考虑使用该插件,因为它包含许多其他功能。
答案 1 :(得分:3)
在HTML5中,如果浏览器支持它,它本身就是supports checking validity:
$("#foo").blur(function(){
alert(this.checkValidity());
});
演示:http://jsfiddle.net/DerekL/6djkS/
如果浏览器不支持,你可以随时回到丑陋的旧版Regex。
基于JSON中使用的数字定义:
http://www.json.org/number.gif
(删除了负面的科学记数部分。)
var regex = /^\d*(.\d{2})?$/;
regex.test(price); //Boolean
答案 2 :(得分:0)
对于https://stackoverflow.com/a/21494842/1885344,正确的正则表达式是
var regex = /^\d*(\.\d{2})?$/;
regex.test(price); //Boolean
就像现在一样,它会允许所有字符作为小数分隔符,因为它应该只是点(。)字符。