如何确保提交的数据是一个有效的数字对?
我收到一个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)); }); }