用于验证的正则表达式只接受双倍数值,不应该在javascript中使用单词,-ve值等

时间:2013-09-06 06:11:19

标签: javascript validation

只接受双倍数值的正则表达式不应该在javascript中使用单词,-ve值

$('document').ready(function() {
        $(".btn").click(function() {
            var amount = $('#amountId').val();

            if (amount <= 0) {
                alert("Please insert a valid Amount! ");
                return false;
            }
        });

我尝试了这个,但是我想要更多的验证,因为我上面提到的只有双倍金额应该是除了双倍金额

2 个答案:

答案 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',它更适合这种情况。如果需要,您也可以删除与指数语法匹配的东西。