我一直在寻找一个解决方案,但没有任何安静符合我的标准。
我希望用户能够输入任何正数(可选2个小数位,用点''分隔。')
即:1.23,12.23,123.23,1234.23,1,0
我该怎么做?
我试图使用这个正则表达式
$('form').submit(function(){
var amount = $('#amount');
var regex = new RegExp("^\d+(\.\d{1,2})?$");
var error = 0;
if(amount.val() == '' || amount.val() <= 0 || regex.test(amount.val()) == false){
$('label', amount.parent()).addClass('error');
error++;
}else{
$('label', amount.parent()).removeClass('error');
}
if(error > 0){
return false;
}
});
我对正则表达式不是很有经验,并试图使用我通过搜索找到的上面的代码,但它似乎不起作用,我不知道为什么。我不确定这是正则表达式中的错误还是我使用它的方式。
答案 0 :(得分:2)
将var regex = new RegExp("^[-+]?\d+(\.\d\d?)?$");
用于2位小数(第1次强制,第2次不要)。
答案 1 :(得分:1)
类似的东西:
^\d+(\.\d{1,2})?$
请注意,我们删除了标记部分[-+]?
,因为您只说了正数。
说明:
^ start of string
\d+ match zero or more digits
(\.\d{0,2})? match the pattern in the brackets 0 or 1 time
\. match a literal .
\d{1,2) match 1 or 2 digits
$ end of string
因此,这允许某些数字可选地后跟.
和1或2个数字。根据需要进行调整。
var rx = /^\d+(\.\d{1,2})?$/;
alert(rx.test("1.22") + "\n" // true
+ rx.test("10") + "\n" // true
+ rx.test("2223.4") + "\n" // true
+ rx.test("foo") + "\n" // false
+ rx.test("1..22") + "\n" // false
+ rx.test(" 1")); // false
答案 2 :(得分:0)
您发布的正则表达式允许任意数量的小数位。这个只允许2位小数
var regex = new RegExp("^[-+]?\d+(\.\d\d?)?$");
答案 3 :(得分:0)
它长而丑,我不记得我最初得到它的地方但这是我使用的那个(它验证了正确的逗号分隔,并允许在开头的可选$):
var regex = /^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(.[0-9]{2})?$/;
这是一个工作小提琴:http://jsfiddle.net/5v9zcxrm/5/
对于我使用的小数位(。[0-9] {2})仅验证2个小数位或零。如果你想允许一个小数位使用:
var regex = /^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(.[0-9]{1,2})?$/;
如果您只需要数字(没有逗号)并且可能使用一位或两位数的小数:
var regex = /^\d+(.[0-9]{1,2})?$/;
答案 4 :(得分:0)
$('form').submit(function(){
var amount = $('#amount');
var regex = /^\d+(\.\d{2,2})?$/;
var error = 0;
if(amount.val() == '' || amount.val() <= 0 || regex.test(amount.val()) == false){
$('label', amount.parent()).addClass('error');
error++;
}else{
$('label', amount.parent()).removeClass('error');
}
if(error > 0){
return false;
}
});
这是我更新的解决方案,按预期工作。特别感谢Matt Burland和所有使这一切成为可能的人