Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何验证包含表达式/条件的字符串_Javascript_Regex_String - Fatal编程技术网

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

Javascript 如何验证包含表达式/条件的字符串,javascript,regex,string,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 val

社区好

我正在寻找一种方法来验证存储在字符串中的表达式,比如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
...
无效输入:

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
...
函数有效(expr){
试一试{
返回值(expr);
}抓住{
返回false;
}
}
//有效的;正确语法并返回true
log(isValid(`true`));
log(isValid(`true==(true&&false)| true`);
//无效
console.log(isValid(`true 0`));//语法错误
console.log(isValid(`true==0`));//语法正确但返回false
您可以使用,并使用异常作为附加返回

如果需要,可以返回
true
(是的,这是一个表达式),而不是计算值

函数检查(表达式){
var结果;
试一试{
结果=评估(表达式);
}捕获(错误){
返回错误。toString();
}
返回结果;
}
变量表达式=['30&&4==true','20+3==false','f*ck'];

console.log(expressions.map(check))
eval
。。。。。。。?是否要验证这是一个有效的表达式或结果是否正确?是否只需要某个表达式或具有给定样式的表达式?为什么
203==true
有效,但
''=20
是否无效?它们都是有效的相等性检查,是什么使一个与另一个不同?如果用户可以输入字符串,那么我将使用
eval
try。。。catch
语句。否则,您需要一个合适的解析器。您还必须捕获
eval
-OP的返回值,OP只希望计算为
true
的表达式有效。我看到了他在发布此内容后的最后一条评论。。。更新。感谢您的帮助!;)非常感谢!!:)