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

时间:2019-05-28 13:09:49

标签: javascript validation

有很多方法可以使用正则表达式和相应地使用match / test match来检查字符串是否有效。 我正在检查包含字母(ab),运算符(+,-,/,*),仅特殊字符(例如(')','(')和数字(0-9))的表达式是否有效< / p>

我已经尝试过传统方法,当字符为'('时推送,而当')为弹出时,是否检查平衡括号。 代码几乎甚至对操作员也有效,但是在某些情况下我缺乏支持。 提供的代码在某种程度上可能是正确的。

                      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;
                        }
                        }

                        }

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

当每个字符后跟运算符或括号时,表达式应完整 任一运算符后仅跟字符 括号后面是唯一字符。 当前索引(前后)中不能同时包含运算符,并且不能同时包含两个字符

1 个答案:

答案 0 :(得分:1)

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

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

// 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;
    }
}

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

  • 尝试使用您的公式作为正文实例化Function作为参数名称的["a", "b", ...]
  • 使用示例输入(在我的情况下为["a", "b", ...])执行此功能

如果您不希望像我的示例那样自由,也可以测试字符范围(如果您不想内联,则不必允许;或̀ , javascript)