js结合正则验证数学公式

目前有个需求要根据格式判断用户输入的数学公式是否正确
例1:[计算项]+[计算项]+1000
例2:[计算项](向上取整/向下取整/取绝对值/四舍五入)+[计算项]+1000
运算符包括+ - * /

function checkCalcExpressionValid(string){
        // 剔除空白符
        string = string.replace(/\s/g, '');

		// 错误情况,空字符串
		if("" === string){
			return false;
		}

        // 错误情况,运算符连续
        if( /[\+\-\*\/]{2,}/.test(string) ){
            return false;
        }

        // 空括号
        if(/\(\)/.test(string)){
            return false;
        }

        //空中括号
        if (/\[\]/.test(string)){
            return false;
        }

        // 错误情况,括号不配对
        var stack = [];
        for(var i = 0, item; i < string.length; i++){
            item = string.charAt(i);
            if('(' === item){
                stack.push('(');
            }else if(')' === item){
                if(stack.length > 0){
                    stack.pop();
                }else{
                    return false;
                }
            }
        }
        if(0 !== stack.length){
            return false;
        }

        // 错误情况,中括号不配对
        var stack2 = [];
        for(var i = 0, item; i < string.length; i++){
            item = string.charAt(i);
            if('[' === item){
                stack2.push('[');
            }else if(']' === item){
                if(stack2.length > 0){
                    stack2.pop();
                }else{
                    return false;
                }
            }
        }
        if(0 !== stack2.length){
            return false;
        }

        // 错误情况,(后面是运算符
        if(/\([\+\-\*\/]/.test(string)){
            return false;
        }

        // 错误情况,)前面是运算符
        if(/[\+\-\*\/]\)/.test(string)){
            return false;
        }

        // 错误情况,[后面是运算符
        if(/\[[\+\-\*\/]/.test(string)){
            return false;
        }

        // 错误情况,]前面是运算符
        if(/[\+\-\*\/]\]/.test(string)){
            return false;
        }

        //错误情况,运算符号不能在首末位
        if(/^[\+\-\*\/.]|[\+\-\*\/.]$/.test(string)){
            return false;
        }

        //错误情况,中括号结尾到下一个开始之间没有运算符
        if(/\]\[/.test(string)){
            return false;
        }

        return true;

    }

附带正则表达式在线测试链接(方便调试对于自己适用的正则):https://c.runoob.com/front-end/854/
参考链接:https://blog.csdn.net/notejs/article/details/20608371

你可能感兴趣的:(js,前端技术,javascript)