2016-09-22 7 views
0

実際には括弧の検証がありますが、角括弧が括られている場合にのみ括弧が空であるかどうかは検証されません。空の括弧で数式を検証する

たとえば、 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; 
} 

あります?何か案は?

+0

これを構文木に解析してみてください(とにかくそれを行う必要があると思います)。そうすればもっと簡単になります。 – Bergi

答えて

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にそれを使用しています。もう1つの制限:、"[+*/-]"などの場合はtrueが返されます。

+1

'string'ではなく' formularSP'で呼び出すようにしてください。そうでなければ、 ''() ''は有効とみなされます。 – Bergi

関連する問題