gpt4 book ai didi

javascript - 在执行之前测试 JavaScript 表达式是否格式良好

转载 作者:行者123 更新时间:2023-12-02 19:40:39 24 4
gpt4 key购买 nike

我有一个脚本,它接受用户输入,对该输入执行一些操作,然后执行修改后的输入。

示例:

用户输入“vbscipt 或 javascript”

我的脚本将其转换为:

var searchtest = "mystring.search('vbscript')>=0 || mystring.search('javascript')>=0";

并使用 eval(searchtest) 执行它;

但是,如果用户输入“vbscript javascript”

我的脚本将其转换为

var searchtest = "mystring.search('vbscript')>=0 mystring.search('javascript')>=0";

(注意缺少 ||)当我调用 eval(searchtest); 时会导致错误;

有没有办法在执行之前测试 searchtest 字符串以确定它是否是有效的 JavaScript 表达式?

最佳答案

JavaScript eval 是邪恶的!!

为什么不像下面这样转换用户输入:

// list of values considered valid
myString = ['javascript', 'vbscript', 'perl', 'python'];

function search (x) {
// Returns true if x is a value an array (passed as `this`)
return this.indexOf (x) >= 0;
}

function searchTest (userInput, myString, search) { 'use strict';

function orClause (clause) {
// caluse is a series of values separated by `or`, return true
// if any search returns true for any of the values.
clause = clause.split (/\s+or\s+/i); // split on 'or'
while (clause.length) { // for each value
if (search.apply (myString, [clause.shift ()])) {
return true;
}
}
return false; // no matches....
}

userInput = userInput.split (/\s+and\s+/i); // split on 'and'

// userInput is now an array of clauses each is either a value or
// a series of values separated by `or`. We pass each clause to
// the orCaluse function and return true only if ALL returns are true.
while (userInput.length) {
if (!orClause (userInput.shift ())) {
return false; // and fails
}
}

return true; // All true so return true.
}

searchTest ('fred or javascript and python', myString, search),

我假设您的表达式可以是 andor 的序列,其中 and 优先

关于javascript - 在执行之前测试 JavaScript 表达式是否格式良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com