字符串转换为数字
回答
使用eval()
功能:
var result = eval('10*10*10');
alert(result); // alerts 1000
是的,但我无法对此答案赞不绝口,因为您没有通过关于何时这将是一个令人难以置信的糟糕主意的任何警告。 – 2011-06-15 10:02:09
可以使用eval
函数的字符串表达式求值:
var evaluated = eval(s);
alert(evaluated)
也就那么警报1000
。
如果你 “只是” 想有这些号码的开出的字符串,你可以做
eval(s)
得到 “10 * 10 * 10” 的号码
如果的字符串是从一个真正值得信赖的来源,你可以使用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);
}
...但同样,我相信你的实际需求更加复杂 —其他运营商,各地值,括号空格等
下面安迪·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
这正则表达式可能不是完美的,我会在它漫长而艰难的盯着面前我会让任何洗过头输入的道路......
+1;使用正则表达式可能最容易将输入中的数字和数学运算符列入白名单。 – 2011-06-15 09:57:33
@安迪E:是的,如果你半信任源代码,这可能是一条路。 :-) – 2011-06-15 09:59:05
+1很好的答案。在适当的时候使用'eval',警告什么时候没有,以及另一种方式(我正在考虑发布,但是cba想出什么努力!) – 2011-06-15 10:01:49
这可能不采取非常简单地实现eval
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"))
- 1. 转换数字字符串转换为字符串
- 2. 转换为数字字符串,数字
- 3. 数转换为字符串
- 4. 转换字符串数组为数字
- 5. 字符串转换为字节转换
- 6. 将字符串转换为字符串
- 7. 将字符串转换为数字node.js
- 8. Knockout.js将数字转换为字符串
- 9. 字符串转换为数字矢量
- 10. 将字符串转换为数字
- 11. 从字符串转换为数字
- 12. 字符串数据转换为字典
- 13. 字符串转换为数字
- 14. Android:EditTextPreference将字符串转换为数字
- 15. rails将字符串转换为数字
- 16. Fortran将字符串转换为数字
- 17. 转换数字为字符串
- 18. 将字符串转换为数字
- 19. C#将字节数组与字符串转换为字符串
- 20. 将字典<字符串,字符串>转换为数组
- 21. CMake的函数字符串转换为C字符串字面
- 22. 将字符串转换为字符
- 23. 将字符串转换为字符
- 24. 将字符串转换为字符
- 25. 从字符串转换为字符 - C++
- 26. 将char字符串转换为字符
- 27. Java - 将字符串转换为字符[]
- 28. InfixToPostfix将字符转换为字符串
- 29. 注意:数组到字符串转换将数组转换为字符串
- 30. 将字符串数组字符转换为数字
只适用于乘法运算符? – patapizza 2011-06-15 09:48:03
这些值来自哪里? – 2011-06-15 09:48:14
@tomalak它来自yaml,它是一个配置文件。 – 2011-06-15 09:55:58