如何验证一个包括表达式/条件的字符串



你好社区!

我正在寻找一种验证表达式的方法,例如在if块中存储在字符串中的条件。

示例:

expression = "2 + 3 == 5"; //or "true || false == true"
if(validationFunc(expression)){
   //do something
}
...
//validates the string and returns a boolean-value
function validationFunc(str) {
   //do validation
   var regex = /^([s()!]*(([0-9]+)|(true|false){1})[s()]*[+-=*%!]*)+$/g;
   return str.match(regex);
}

有可能用 REGEX 验证"表达式"。我试图做出正则表达,但似乎比我预期的要复杂。此外,我在网络中找不到解决此问题的方法。

有人解决了这个问题的解决方案,或者是否有其他方法可以匹配/验证此字符串?

有效输入:

true
1 == true
203 == true
0 == false
true == true
true != false
(true && false) || true == true
true == (true && false) || true
20 + 40 == 60
...

无效输入:

empty string
true 0
'' != 20
30 && 4 == true
20 + 3 == false
...

您可以使用 try ... catch语句并使用异常来返回。

如果需要,您可以返回true(是的,是表达式),而不是评估的值。

function check(expression) {
    var result;
    try {
        result = eval(expression);
    } catch (error) {
        return error.toString();
    }
    return result;
}
var expressions = ['30 && 4 == true', '20 + 3 == false', 'f*ck'];
console.log(expressions.map(check));

function isValid(expr) {
  try {
    return eval(expr);
  } catch {
    return false;
  }
}
// Valid ; Correct syntax and return true
console.log(isValid(`true`));
console.log(isValid(`true == (true && false) || true`));
// Not valid
console.log(isValid(`true 0`)); // Incorrect syntax
console.log(isValid(`true === 0`)); // Correct syntax but returns false

最新更新