输入数据的验证经常发生在用户录入数据后,在对输入数据进行处理前对其进行检验,确定其是否满足一定的规则。这里介绍一种经验法则,用于频繁的数据验证过程。
注:下面的例子用到一个用于表示均匀分布参数设置信息的类
/// <summary>
/// 均匀分布类
/// </summary>
public class UniformDistribution
{
public double LowerLimit { get; set; }
public double UpperLimit { get; set; }
public UniformDistribution(double lw, double up)
{
LowerLimit = lw;
UpperLimit = up;
}
}
1、定义一个验证返回类型VerifyResult,其中包含一个int类型的故障码,一个string类型的故障消息,以及一个作为返回值的对象。
/// <summary>
/// 验证返回结果类
/// </summary>
public class VerifyResult
{
public int Code { get; set; }
public string Message { get; set; }
public object ReturnedValue { get; set; }
public bool IsPass
{
get { return Code == 0; }
}
//构造函数
public VerifyResult()
{
Code = 0; //默认0为通过验证标识
Message = string.Empty;
ReturnedValue = null;
}
}
2、定义一个类包装验证方法库,由简到繁实现层次化的数据验证
/// <summary>
/// 验证方法库类
/// </summary>
public class Verifier
{
//基本验证:输入正实数
public static VerifyResult PositiveNumberVerifer(string content)
{
VerifyResult result = new VerifyResult();
double value = 0;
if (!double.TryParse(content, out value))
{
//浮点数解析失败则添加相应错误信息
result.Code = -1; //给定一个错误码
result.Message = "请输入数值...";
}
else if (value < 0)
{
//解析成功但为负数,同样添加相应错误信息
result.Code = -2;
result.Message = "请输入一个正数...";
}
else
result.ReturnedValue = value;
return result;
}
//组合验证器
public static VerifyResult UniformSettingVerifer(string lowerLimitStr, string upperLimitStr)
{
VerifyResult result = new VerifyResult();
//调用低层次验证器作数字验证
VerifyResult lowerLimitResult = PositiveNumberVerifer(lowerLimitStr);
VerifyResult upperLimitResult = PositiveNumberVerifer(upperLimitStr);
//补充组合验证法则
if (lowerLimitResult.Code < 0)
{
result.Code = -1;
//组合错误消息
result.Message = "下限设置格式有误!" + lowerLimitResult.Message;
}
else if (upperLimitResult.Code < 0)
{
result.Code = -2;
result.Message = "上限设置格式有误!" + upperLimitResult.Message;
}
else if (lowerLimitResult.Code == 0 && upperLimitResult.Code == 0)
{
//高层次验证
if ((double)lowerLimitResult.ReturnedValue > (double)upperLimitResult.ReturnedValue)
{
result.Code = -3;
result.Message = "下限值不能大于上限值...";
}
else
{
//所有验证通过,构造返回值对象
result.ReturnedValue = new UniformDistribution((double)lowerLimitResult.ReturnedValue,
(double)upperLimitResult.ReturnedValue);
}
}
return result;
}
}
3、
在应用程序中使用输入数据前调用相应的验证函数对数据进行检查,若不返回错误码则继续下一步的处理,否则应通过MessageBox显示错误信息
private void Button_Click(object sender, RoutedEventArgs e)
{
//测试数据验证功能:界面中包含两个文本框tbLowerLimit和tbUpperLimit
var verify = Verifier.UniformSettingVerifer(tbLowerLimit.Text, tbUpperLimit.Text);
if (verify.IsPass)
{
//使用输入的数据
var uniform = verify.ReturnedValue as UniformDistribution;
MessageBox.Show("通过验证");
}
else
{
MessageBox.Show(verify.Message);
}
}
当然,这种方法可以作为WPF数据绑定的验证技术的一部分,实现更完善的验证功能,例如错误信息突出显示等。