用空括号验证数学方程

时间:2016-09-22 03:26:30

标签: javascript node.js validation

我需要验证一个等式,实际上我有括号验证但是只有在括号平衡时才会验证括号是否为空。

例如 2 + 5 + (3 * {1 – 2}) = 4返回true,但1 + ()也返回true,我需要返回false。

这是我的代码

function mathFormulaValidator(string) {
    "use strict";

    let formulaSP = string.replace(/ /g, ""),
        arr = [],
        valid = true;

    for (let i = 0; i < formulaSP.length; i++) {
        let char = formulaSP.charAt(i);
        switch (char) {
            case '(':
                arr.push(1);
                break;
            case ')':
                if (arr.pop() != 1) {
                    valid = false;
                }
                break;
            case '[':
                arr.push(2);
                break;
            case ']':
                if (arr.pop() != 2) {
                    valid = false;
                }
                break;
            case '{':
                arr.push(3);
                break;
            case '}':
                if (arr.pop() != 3) {
                    valid = false;
                }
                break;
            default:
                console.error(char);
                break;
        }
    }
    return valid;
}

如何验证括号是否为空?任何想法?

1 个答案:

答案 0 :(得分:1)

使用此:

string.match(/\(\)|{}|\[\]/) == null

如果没有空(),{}或[]

,这将返回true

如果有任何礼物,它将返回false

例如:

"[]".match(/\(\)|{}|\[\]/) == null
false

"{(}".match(/\(\)|{}|\[\]/) == null
true

"2 + 5 + (3 * {1 – 2}) = 4".match(/\(\)|{}|\[\]/) == null
true

"1 + ()".match(/\(\)|{}|\[\]/) == null
false

修改 Bergi是对的,在剥离所有空格后在formulaSP上使用它。另一个限制:它会为true"(-)"或类似内容返回"[+*/-]"