你好社区!
我正在寻找一种方法来验证存储在字符串中的表达式(如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
...
答案 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