如何确保提交的数据是有效的数字对?

时间:2014-12-07 16:48:34

标签: javascript node.js

我收到一个字符串。 它应采用以下格式:

number,number

例如:

34.798,52.123

如何验证号码是否采用此格式?我需要将它分配给一些变量,并进行一些计算。但由于它是javascript(node.js),有人可能会提交一个函数,并尝试让我的应用程序调用它。如何验证提交的字符串是否采用上述格式?

我考虑过以下方法:

function checkIfValid(input){
    var result = false;
    input = input.trim();
    var tokens = input.split(",");
    if(tokens.length==2){
        if(!isNaN(tokens[0]&&!isNaN(tokens[1]){
            result = true;
        }
    }
   return result;
}

有更好的方法吗?可以被黑客攻击吗?

3 个答案:

答案 0 :(得分:0)

检查parseFloat

之间的不变性
function checkIfValid(input){
    input = input.trim();
    var tokens = input.split(",");
    if(tokens.length === 2){
        var t0 = tokens[0];
        var t1 = tokens[1];
        return parseFloat(t0) == t0 && parseFloat(t1) == t1;
    }
   return false;
}

答案 1 :(得分:0)

您可以使用JSON.parse(在[ ... ]中包装后),然后检查您是否有两个数字的数组:

var x = null;
try { x = JSON.parse("[" + data + "]"); } catch (err) { x = null; }
if (x && x.constructor === Array && x.length === 2 &&
    typeof x[0] === "number" && typeof x[1] === "number") {
  ... data is ok ...
} else {
  ... data is invalid ...
}

这种方法也适用于其他更复杂的案例。

唯一令人烦恼的是,Javascript的某些有效数字对JSON无效(出于我不理解的原因)。例如“1”是无效的JSON(小数点后必须是数字)。您也不能使用NaN和无穷大值,因为它在JSON中也是无效的。

答案 2 :(得分:0)

代码的问题是isNaN('') == false的边缘情况;这是因为''被转换为可以表示的0的数值。

您应首先使用parseFloat()解析值:

function checkIfValid(input)
{
    var parts = input.split(',');

    return parts.length == 2 && parts.every(function(part) {
        return !isNaN(parseFloat(part));
    });
}