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;
}
}
}
}