• 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
  • 相关阅读:
    双链表 teacherboubleloopnohead
    System.Reflection(温习二)
    在地址栏调试js(小技巧)
    在vs2005中的ReportViewer(RDLC报表)中使用直接打印功能,在vs2005使用ReportViewer2008
    .net的手动编译类方法
    System.Reflection(温习)
    https://imo.im/
    SOA是什么(转)
    ASP.NET的编译方法(转,复习一下)
    动态生成一个继承接口的类
  • 原文地址:https://www.cnblogs.com/sugarwxx/p/16779419.html
Copyright © 2020-2023  润新知