using DynamicExpresso; using System.Linq; namespace IStation.DynamicExpresso { /// /// 验证器 /// public class Validator { /// /// 验证(最多包含一个变量) /// /// 计算表达式 /// 变量 /// public static bool Verify(string expression, string arg) { if (string.IsNullOrEmpty(expression)) return false; var interpreter = new Interpreter(); if (!string.IsNullOrEmpty(arg)) interpreter.SetVariable(arg, 1); try { _ = interpreter.Eval(expression); return true; } catch { return false; } } /// /// 验证 (规定变量数量) /// /// 计算表达式 /// 变量数量 /// public static bool Verify(string expression, int count = 1) { if (string.IsNullOrEmpty(expression)) return false; var interpreter = new Interpreter(); var args = interpreter.DetectIdentifiers(expression).UnknownIdentifiers.ToList(); if (args.Count != count) return false; args.ForEach(x => interpreter.SetVariable(x, 1)); try { _ = interpreter.Eval(expression); return true; } catch { return false; } } /// /// 验证 (规定最多变量数量) /// /// 计算表达式 /// 最多变量数量 /// public static bool VerifyMax(string expression, int maxCount = 1) { if (string.IsNullOrEmpty(expression)) return false; var interpreter = new Interpreter(); var args = interpreter.DetectIdentifiers(expression).UnknownIdentifiers.ToList(); if (args.Count > maxCount) return false; args.ForEach(x => interpreter.SetVariable(x, 1)); try { _ = interpreter.Eval(expression); return true; } catch { return false; } } } }