你好社区!
我正在寻找一种验证表达式的方法,例如在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