[英]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.