簡體   English   中英

將字符串轉換為數字

[英]Convert string to number

我有一些簡單的變量,其值為數字字符串:

var s = '10*10*10',
    v = '60*10';

我想將s變成1000 ,將v變成600

使用eval()函數:

var result = eval('10*10*10');
alert(result); // alerts 1000

如果字符串來自真正可信的來源,則可以使用eval進行操作:

var s = '10*10*10';
var result = eval(s);

但是請注意, eval會啟動JavaScript解析器,解析給定的字符串,然后執行它。 如果給定的字符串有可能不是來自受信任的源,則您不想使用它,因為您可以使源具有任意執行代碼的能力。

如果您不信任源,則必須自己解析該字符串。 您的具體示例很簡單,但是我確信您的實際需求更加復雜。

容易的死法:

var s, operands, result, index;
s = '10*10*10';
operands = s.split('*');
result = parseInt(operands[0], 10); 
for (index = 1; index < operands.length; ++index) {
    result *= parseInt(operands[index], 10);
}

...但是再次,我確定您的實際要求更加復雜-其他運算符,值周圍的空格,括號等。


采納以下Andy E的評論,將白名單加入是一種可行的方法:

function doTheMath(s) {
    if (!/^[0-9.+\-*\/%() ]+$/.test(s)) {
        throw "Invalid input";
    }
    return eval('(' + s + ')');
}
var result = doTheMath('10*10*10');               // 1000
var result2 = doTheMath('myEvilFunctionCall();'); // Throws exception

現場例子

該regexp可能並不完美,在讓任何未清洗的輸入前進之前,我會凝視它很長時間。

這可以很簡單地實現而無需求助

function calc(s) {

   s = s.replace(/(\d+)([*/])(\d+)/g, function() {
        switch(arguments[2]) {
            case '*': return arguments[1] * arguments[3];
            case '/': return arguments[1] / arguments[3];
        }
   })

   s = s.replace(/(\d+)([+-])(\d+)/g, function() {
        switch(arguments[2]) {
            case '+': return parseInt(arguments[1]) + parseInt(arguments[3]);
            case '-': return arguments[1] - arguments[3];
        }
   })

   return parseInt(s);

}

alert(calc("10+5*4")) 

您可以使用eval函數來評估字符串中的表達式:

var evaluated = eval(s);

alert(evaluated)將提醒1000

如果您只是想將這些數字從字符串中刪除,則可以這樣做

eval(s)

得到“ 10 * 10 * 10”作為數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM