2016-09-22 3 views
0

Ich muss eine Gleichung validieren, tatsächlich habe ich Bracket-Validierung, aber das validiere nicht, wenn die Klammern nur leer sind, wenn Klammern ausgeglichen sind.validiere mathematische Gleichung mit leeren Klammern

Zum Beispiel 2 + 5 + (3 * {1 – 2}) = 4 zurück True, aber 1 +() auch True und ich muss falsch zurückgeben.

Dies ist mein Code

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

Wie kann überprüfen, ob die Klammern leer sind ?? irgendwelche Ideen?

+0

Versuchen Sie, es in einen Syntaxbaum zu parsen (ich denke, Sie müssen das trotzdem tun), dann wird es viel einfacher. – Bergi

Antwort

1

verwenden:

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

Diese true zurückkehren wird, wenn es keine leere Klammern() {} oder []

Wenn es eine der Anwesenden sind, wird es false zurück.

Zum Beispiel:

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

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

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

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

Edit: Bergi richtig ist, verwenden Sie es auf formulaSP nach alle Räume Strippen. Eine weitere Einschränkung: Es wird true für "(-)", "[+*/-]" oder ähnliches zurückgegeben.

+1

Nennen Sie es nicht auf 'string', sondern auf' formularSP', da sonst '"() "' als gültig angesehen würde. – Bergi

Verwandte Themen