只接受双倍数值的正则表达式不应该在javascript中使用单词,-ve值
$('document').ready(function() {
$(".btn").click(function() {
var amount = $('#amountId').val();
if (amount <= 0) {
alert("Please insert a valid Amount! ");
return false;
}
});
我尝试了这个,但是我想要更多的验证,因为我上面提到的只有双倍金额应该是除了双倍金额
答案 0 :(得分:0)
您是否尝试过parseFloat
?
来自MDN:
以下示例均返回3.14
parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");
parseFloat("3.14more non-digit characters");
答案 1 :(得分:0)
您可以分几步完成,查找无效字符,然后删除空格,然后检查有效整数,然后解析它并检查值。
但是,如果您想尝试一个正则表达式,您可以尝试这样的事情:
var pattern = /^[0-9]*(.[0-9]*)?([eE][-+][0-9]*)?$/
如果要忽略空格,则需要先处理空格(trim
输入字符串)。如果不允许,您还需要过滤掉0。
下面的函数执行其中一些操作并返回一个带有解析数字的对象(使用纪元建议的parseFloat
)以及是否有效的指示。您应该能够将其放入代码中并进行调整以执行您想要的操作:
function processInput(s) {
var pattern = /^[0-9]*(.[0-9]*)?([eE][-+][0-9]*)?$/
var answer = { result: 0, isValid: false };
// remove whitespace from start and end
s = s.trim();
if (s.length > 0) {
answer.isValid = pattern.test(s);
if (answer.isValid) {
answer.result = parseFloat(s);
}
// Might need a special test for 0 here
}
return answer;
}
我可能错过了一两个特定的案例,但我测试了很多可能的事情,输出:
'3' -> { result: 3, isValid: true }
'.289213123' -> { result: 0.289213123, isValid: true }
'0.2' -> { result: 0.2, isValid: true }
'3.14' -> { result: 3.14, isValid: true }
'3.14.14' -> { result: 0, isValid: false }
'-3.14' -> { result: 0, isValid: false }
'314e-2' -> { result: 3.14, isValid: true }
'0.0314E+2' -> { result: 3.14, isValid: true }
'3.14more non-digit characters' -> { result: 0, isValid: false }
'3.' -> { result: 3, isValid: true }
'' -> { result: 0, isValid: false }
请注意,有效的负数会返回false,因为您的输入中不允许使用负数。所以这不是一般的'isNumeric',它更适合这种情况。如果需要,您也可以删除与指数语法匹配的东西。