Javascript 转换;10/2“;到一个数字?

Javascript 转换;10/2“;到一个数字?,javascript,discord.js,Javascript,Discord.js,我正在处理一个discord.js,发现了以下问题,我想将用户输入转换成一个数字我正在处理一个计算机器人,所以参数像10/2,但我找不到将字符串转换成数字的方法,所以我想我会问,我想也许Number函数可以工作,但它没有,并尝试使用数组,但join函数只是将其转换为字符串。有人知道如何解决这个问题吗?最简单的方法是使用eval()获取包含javascript代码的字符串,对其求值,然后返回结果。然而,这是非常危险的,您可以发送任何javascript代码,javascript会很高兴地执行它 这

我正在处理一个discord.js,发现了以下问题,我想将用户输入转换成一个数字我正在处理一个计算机器人,所以参数像10/2,但我找不到将字符串转换成数字的方法,所以我想我会问,我想也许Number函数可以工作,但它没有,并尝试使用数组,但join函数只是将其转换为字符串。有人知道如何解决这个问题吗?

最简单的方法是使用
eval()
获取包含javascript代码的字符串,对其求值,然后返回结果。然而,这是非常危险的,您可以发送任何javascript代码,javascript会很高兴地执行它

这将使bot的用户能够执行任何命令,基本上可以远程控制您的计算机/服务器

为了避免出现这种情况,您应该确保字符串只包含一些允许的字符,如:

const allowedChars = "1234567890/*+-% ";
const input = "2323 + 323";

if (![...input].some(x => !allowedChars.includes(x))) {
    // safe to evaluate
    const result eval(input);
} else {
    // not safe to execute
}

如果要避免使用
eval
,则需要解析出数字,将其转换为数字,然后执行相应的操作

const rx=/(\d+(?:\。\d+)\s*([+-\/%])\s*(\d+(?:\。\d+)/;
函数数学(str){
常数[满,左,右]=接收执行(str);
让我们回顾
开关(op){
格“+”:
retval=编号(左侧)+编号(右侧);
打破
//等等。。。
}
返回返回;
}
log(“1+1=”,math(“1+1”);

console.log(“1.1+1.1=”,math(“1.1+1.1”)
eval('10/2')
@iota可以运行任何js代码,这非常有用dangerous@Luke_这取决于字符串的生成方式。@iota正如OP所提到的,字符串来自discord服务器,因此人们可以键入任何命令,并让机器人将其解释为代码