2014-12-07 71 views
2

我收到一個字符串。 應該採用以下格式:如何確保提交的數據是有效的數字對?

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

您可能會發現的JavaScript'parseFloat'功能非常有用。 – Victory 2014-12-07 16:50:51

回答

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

使用isNan有什麼問題? – 2014-12-07 17:55:47

+0

@John - 清晰! – Victory 2014-12-07 18:02:15

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中也是無效的。

+0

這比使用isNan更好嗎? – 2014-12-07 17:56:13

+0

@John:「這個」是什麼?無論如何,你讓我記得NaN和無限也不被JSON接受(也不知道爲什麼)。如果你用'JSON.parse'解析的東西是類型「number」,你可以肯定它不是NaN。 – 6502 2014-12-07 17:59:17

0

您的代碼存在的問題是isNaN('') == false的邊緣情況;這是因爲''被轉換爲可以表示的0的數值。

你應該先分析使用parseFloat()值:

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

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