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

我收到一个string。 它的格式应该是:

number,number 

例如:

 34.798,52.123 

我怎样才能确认号码是以这种格式? 我需要把它分配给一些变数,并做一些计算。 但是因为它是javascript(node.js),所以有人可能会提交一个函数,并尝试让我的应用程序调用它。 我如何validation提交的string是以上述格式?

我已经考虑了以下方法:

 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; } 

有一个更好的方法吗 ? 它可以被黑客入侵吗?

检查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; } 

你可以使用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中也是无效的。

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

你应该首先使用parseFloat()分析值:

 function checkIfValid(input) { var parts = input.split(','); return parts.length == 2 && parts.every(function(part) { return !isNaN(parseFloat(part)); }); }