所以我真的找不到太多这方面的信息。我的想法是,我有一个用户输入(文本),我想检查它在 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/