我需要验证一个等式,实际上我有括号验证但是只有在括号平衡时才会验证括号是否为空。
例如
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 :(得分: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
,"(-)"
或类似内容返回"[+*/-]"
。