gpt4 book ai didi

javascript - 检查数字表达式(线性)是否有效?

转载 作者:行者123 更新时间:2023-12-02 23:34:28 29 4
gpt4 key购买 nike

有很多方法可以使用正则表达式并相应地使用匹配/测试匹配来检查字符串是否有效。我正在检查包含字母(a-b)、运算符(+、-、/、*)、仅特殊字符(如(')'、'(')和数字(0-9)的表达式是否有效

我已经尝试过传统的方法,当字符为“(”时推送,当字符为“)”时弹出,并检查是否平衡括号。代码几乎适用于甚至运算符(operator),但在某些情况下我有所落后。提供的代码在某种程度上可能是正确的。

                      checkBalancedString(text){
let format = /[A-Za-z0-9]/;
let expression = /[+-\/*]/
if(text.length <=2){
if(format.test(text[0])){
return true;
}
return false;
}
for(let i=0;i<text.length;i++){
let stringcheck=[]
if(text[i]== '('){
stringcheck.push(text[i])
}

switch(text[i]){
case ')':
if(!stringcheck.length){
return false;
}
stringcheck.pop();
break;
}
let checkalphaformat = format.test(text[i]);
if(checkalphaformat){
let nextChar = format.test(text[i+1]);
let nexttonextChar = expression.test(text[i+2])
if(nextChar || nexttonextChar){
return false
}
}else{
let nextChar = format.test(text[i+1]);
if(!nextChar){
return false;
}
if(text[i+2]){
let nextChar = format.test(text[i+2])
if(!nextChar){
return false;
}
}
}

if(!stringcheck.length){
return true;
}
}

}

简而言之,字符串应返回有效的 where 表达式,例如:(a+b)、a+b、a/9、b*5、(e-6*(d+e))、(a+b)/(c-d)和表达如:+、-、-a、+a-、(a+、(a+v、e*)

当每个字符后面都跟有运算符或括号时,表达式应该是完整的任一运算符后仅跟有字符括号后面是唯一的字符。当前索引(前面和后面)中不应有任何运算符,也不应有两个字符在一起

最佳答案

看来您真正想要的是检查公式的有效性,而不是检查特定类型的公式。

这是我在这种情况下使用的方法:

// Return true if the passed string is a valid mathematical expression
// taking as parameter a, b, c, etc.
// Examples:
// 2*a+b*b
// (e-6*(d+e))
// sin(a*PI + b.length) / ( round(d) - log(c) + +("Basse Qualité"===e) )
// for (var i=0, total=0; i<10; i++) total += pow(a,i); return total
check = function(str){
try {
str = str.replace(/(^|[^\."'a-zA-Z])([a-zA-Z]\w+)\b/g, function(s, p, t){
return t in Math ? p + "Math." + t : s;
});
if (!/\breturn\b/.test(str)) str = "return ("+str+")";
var args = "abcdefghijklmnopqrstuvwxyz".split("");
var f = Function.apply(Function, args.concat(str));
f.apply(null, args); // if it works for args it should be ok for numbers...
return true;
} catch (e) {
console.log("error while checking formula", e, str);
return false;
}
}

适用于您的案例的基本思想:

  • 尝试实例化一个函数,其中公式作为主体,["a", "b", ...] 作为参数名称
  • 使用示例输入执行此函数(在我的例子中["a", "b", ...])

如果您不想要像我的示例中那样的自由,您还可以测试字符范围(您不必允许 ; 或 ̀, if你不需要内联 JavaScript)

关于javascript - 检查数字表达式(线性)是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343034/

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