javascript - JS 检查输入字符串是否为有效代码并运行输入

标签 javascript string function typeof

所以我真的找不到太多这方面的信息。我的想法是,我有一个用户输入(文本),我想检查它在 JS 中的代码是否有效,然后运行它(如果有效)。

我知道如果 userInput 实际上是一个函数,但用户输入只是一个函数,我可以执行 if (typeof userInput === "function") {此时我正在输入字符串,所以我陷入了困境,而且它还包含任何参数或其他代码。

举个例子,输入可能是 "alert('test')" 并且这是有效的,我想运行它,但是类似 "madeUpFunction(lol )" 无效。

如果我能让函数正常工作而不是任何 JS 代码,我会很高兴。

最佳答案

您可以提取字符串直到第一个 ( 以获取函数名称,然后使用 typeof eval(funcName) 测试它是否存在。然后使用Function 构造函数,以确保语法对于其余参数有效,而无需实际执行代码。

然后您可以返回执行用户输入内容的函数,但请注意,如果您决定执行该函数,可能会出现安全问题。

function parseFunctionCall(str) {
  var funcName = str.slice(0, str.indexOf('('));
  if (typeof eval(funcName) === 'function') {
    return new Function(str);
  } else {
    throw new Error('Invalid function name');  
  }
}

console.log(parseFunctionCall("console.log('hi')"));

关于javascript - JS 检查输入字符串是否为有效代码并运行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661197/

相关文章:

java - 在addActionListener中找不到文件名,JAVA

c - 将函数的地址获取到C中的结构中

javascript - 动态创建的按钮仅出现一次

javascript - 有什么方法可以使用 javascript 来检测 javascript 事件处理程序触发吗?

javascript - 返回结果中嵌套标准化数据的 ID 列表

swift - 将 Swift 变量名转换为字符串,用作字符串?

javascript - 在 Javascript 中对各种单选按钮进行多次检查

java - 什么是 Java 字符串实习?

计算给定字符串的 float 的长度

c++ - 字符串大小函数不起作用