c# 、js 字符串转换成逻辑表达式

C# 字符串转逻辑表达式

 1         /// <summary>
 2         /// 包含括号的逻辑表达式处理
 3         /// </summary>
 4         /// <param name="str">包含括号或未包含括号的字符串表达式 1>0&&(3<4)&&(5>4)</param>
 5         /// <returns></returns>
 6         public bool ExpressionWithParentheseResult(string str)
 7         {
 8             bool result = false;
 9             //首先判断括号,有多少个
10             string[] parentheses = str.Split('(');
11             //创建表达式判断函数
12             DataTable dt = new DataTable();
13             //有括号的情况
14             if (parentheses.Length > 1)
15             {
16                 //先判断括号里面的
17                 for (int parenthesesIndex = 1; parenthesesIndex < parentheses.Length; parenthesesIndex++)
18                 {
19                     //括号里面的内容
20                     string ParenthData = parentheses[parenthesesIndex].Split(')')[0];
21                     //进行替换(括号结果替换整个括号的内容)
22                     string reParenth = "(" + ParenthData + ")";
23                     str = str.Replace(reParenth, ExpressionResult(ParenthData).ToString());
24                 }
25             }
26             result = ExpressionResult(str);
27             return result;
28         }

 

 1         /// <summary>
 2         /// 非括号表达式处理
 3         /// </summary>
 4         /// <param name="logicStr">逻辑表达式如 1<2&&3>4</param>
 5         /// <param name="val"></param>
 6         /// <returns></returns>
 7         public  bool ExpressionResult(string logicStr)
 8         {
 9             bool result = false;
10             DataTable dt = new DataTable();
11             var data = Regex.Split(logicStr, @"\|\||&&", RegexOptions.IgnoreCase);
12             var operatorStr = "||";
13             for (int i = 0; i < data.Length; i++)
14             {
15                 if (i != 0)
16                 {
17                     operatorStr = logicStr.Substring(logicStr.IndexOf(data[i - 1]) + data[i - 1].Length, 2);
18                 }
19                 var res = (bool)dt.Compute(data[i], "");
20                 result = LogicEx(result, res, operatorStr);
21             }
22             return result;
23         }

 

 1         /// <summary>
 2         /// 逻辑判断
 3         /// </summary>
 4         /// <param name="a1">结果1</param>
 5         /// <param name="a2">结果2</param>
 6         /// <param name="re">运算符</param>
 7         /// <returns></returns>
 8         public  bool LogicEx(bool a1, bool a2, string re)
 9         {
10             bool result = false;
11             switch (re)
12             {
13                 case "&&": result = a1 && a2; break;
14                 case "||": result = a1 || a2; break;
15             }
16             return result;
17         }

JS 字符串转表达式处理

1 var a=1;
2 var b=2;
3 var result= eval("a == null && b != 5")
4 //结果为false

 

posted @ 2022-10-11 15:31  流年sugar  阅读(552)  评论(0编辑  收藏  举报