我收到一个字符串。 它应采用以下格式:
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;
}
有更好的方法吗?可以被黑客攻击吗?
答案 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));
});
}