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