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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值