如何验证包含表达式/条件的字符串

时间:2019-03-11 14:48:35

标签: javascript regex string

你好社区!

我正在寻找一种方法来验证存储在字符串中的表达式(如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 验证“ Expression-String”。我试图制作一个Regex-Expression,但它似乎比我预期的要复杂。另外,我在网络上找不到解决此问题的方法。

有人为这个问题提供了解决方案,还是有另一种方式来匹配/验证这样的字符串?

有效输入:

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
...

2 个答案:

答案 0 :(得分:2)

您可以使用try ... catch statement并将异常用于附加收益。

如果需要,您可以返回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));

答案 1 :(得分:1)

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