55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
|
|
using System.Text.RegularExpressions;
|
|||
|
|
|
|||
|
|
namespace DataCheck;
|
|||
|
|
/*
|
|||
|
|
* 作者:icewint
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 数据校验类
|
|||
|
|
/// </summary>
|
|||
|
|
public class CheckData
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 校验是否满足设定的规则,需要添加 <see cref="DataRulesAttribute"/> 特性
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
/// <param name="data"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool CheckDataRules<T>(T data) where T : class
|
|||
|
|
{
|
|||
|
|
Type type = typeof(T);
|
|||
|
|
var properties = type.GetProperties();
|
|||
|
|
foreach (var property in properties)
|
|||
|
|
{
|
|||
|
|
string? proValue = property.GetValue(data)?.ToString();
|
|||
|
|
var attributes = property.GetCustomAttributes(false);
|
|||
|
|
foreach (var attribute in attributes)
|
|||
|
|
{
|
|||
|
|
if (attribute is DataRulesAttribute dataRules)
|
|||
|
|
{
|
|||
|
|
// 判断是否允许为 NULL
|
|||
|
|
if (!dataRules.AllowNull && proValue == null)
|
|||
|
|
{
|
|||
|
|
// 如果不允许为 null 但是为 null 了就返回错误
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// 下面是允许为 null 的情况
|
|||
|
|
if (proValue == null)
|
|||
|
|
{
|
|||
|
|
// 允许 null 并且为 null 满足要求
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (!Regex.IsMatch(proValue, dataRules.RegexRule))
|
|||
|
|
{
|
|||
|
|
// 允许为 null 但不是 null 且不满足数据要求
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|