gpt4 book ai didi

javascript - 如何使用 JavaScript 评估集合包含测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:53 24 4
gpt4 key购买 nike

我想评估表达式以检查其真实性。

用户给我的表达形式是

x == y || a == (c + 3)

y >= 4

我只会将 eval 用于:

expression.replace(/[^|()\d\+-><=!&]/g, '');
eval(expression);

现在用户想给我设置包含表达式,例如:

5 ∈ y || 3 ∉ y

其中 y 是一个数组。处理该问题的最佳安全方法是什么?

编辑:感谢您的帮助,阅读答案很难决定选择哪个/哪个更好。

最佳答案

只需自己检查是否包含 eval , 用 true 替换包含测试或 false .要实现这一点,您应该可以通过名称访问这些集合,您可以将它们分组到一个对象中 sets其中键是名称,值是集合本身(参见下面的示例):

包含测试:

var newString = string.replace(/(\S+)\s*∈\s*(\S+)/g, function(match, item, set) {
var theActualSet = ...; // get the actual set using 'set'
return theActualSet.includes(+item);
});

排除测试:

var newString = string.replace(/(\S+)\s*∉\s*(\S+)/g, function(match, item, set) {
var theActualSet = ...; // get the actual set using 'set'
return !theActualSet.includes(+item);
});

示例:

var sets = {
y: [1, 2, 3, 4, 5]
};

var string = "5 ∈ y || 3 ∉ y";

var newString = string.replace(/(\S+)\s*∈\s*(\S+)/g, function(match, item, set) {
var theActualSet = sets[set];
return theActualSet && theActualSet.includes(+item);
});

newString = newString.replace(/(\S+)\s*∉\s*(\S+)/g, function(match, item, set) {
var theActualSet = sets[set];
return theActualSet && !theActualSet.includes(+item);
});

console.log("The original string: '" + string + "'");
console.log("The result string: '" + newString + "'");
console.log("The result: " + eval(newString));

现在可以毫无顾虑地轻松评估,只需删除 |()\d\+-><=!& 以外的任何内容和文字 truefalse并使用 eval获得评估结果。

注意:您可以使用 10而不是 truefalse使删除不需要的字符更容易:replace(/[^|()\d\+-><=!&]/g, '')

关于javascript - 如何使用 JavaScript 评估集合包含测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51908392/

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