mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-20 00:11:04 +08:00
185 lines
6.6 KiB
C#
185 lines
6.6 KiB
C#
/* (模型验证提供者)模块说明
|
|
* 模型类 应当继承接口 IReadOnlyXXX 或 IReadOnlyNullableXXX
|
|
* IXXX接口 不继承 IReadOnly 或 IReadOnlyNullable
|
|
* 所以 应当 使用 IReadOnlyXXX 或 IReadOnlyNullableXXX
|
|
* IXXX 实现 get, set 常用于表中的字段
|
|
* IReadOnlyXXX 仅实现get,用于验证字段值是否正确
|
|
* IReadOnlyNullableXXX 基本同上,不同在于允许 null 值,如果字段类型有Empty,则通常Empty等效于null
|
|
* ----------------------------------------------------------------------
|
|
* 添加一个新的列的验证,例:
|
|
* 定义一个 IXXX接口
|
|
* 定义一个 IReadOnlyXXX接口
|
|
* 如果允许null值,则再定义一个 IReadOnlyNullableXXX 接口
|
|
* ----------------------------------------------------------------------
|
|
* 验证过滤字段参数 params Type[] ignores
|
|
* 传入的类型 为接口 IXXX 或 IReadOnlyXXX 或 IReadOnlyNullableXXX 三者等效
|
|
* 实现逻辑:通过反射Name字符串截取获取XXX作为比较
|
|
* ----------------------------------------------------------------------
|
|
* 对于模型类中某一个字段XXX,要么此类继承 IReadOnlyXXX 要么继承 IReadOnlyNullableXXX 不能同时继承两者
|
|
* ----------------------------------------------------------------------
|
|
* 如果对于某一个模型类中的某个类型,需要对另一个字段进行不同的验证,可添加新的类型字段接口
|
|
* 在 ColumnValidate 验证逻辑中 添加新的 is IXXX t switch(t.X) 进行不同的验证
|
|
* ----------------------------------------------------------------------
|
|
* 如果需要根据不同的模型类,进行输出不同的 errorMessage 原理同上
|
|
*/
|
|
|
|
using System.Application.Columns;
|
|
using static System.Application.Services.Implementation.ModelValidator;
|
|
|
|
namespace System.Application
|
|
{
|
|
/// <summary>
|
|
/// 模型验证提供者
|
|
/// </summary>
|
|
public static class ModelValidatorProvider
|
|
{
|
|
public static void Init()
|
|
{
|
|
AddColumnValidate<IReadOnlyPhoneNumber>(ColumnValidate);
|
|
AddColumnValidate<IReadOnlySmsCode>(ColumnValidate);
|
|
//AddColumnValidate<IReadOnlyBirthDate>(ColumnValidate);
|
|
//AddColumnValidate<IReadOnlyGender>(ColumnValidate);
|
|
AddColumnValidate<IReadOnlyAvatar>(ColumnValidate);
|
|
AddColumnValidate<IReadOnlyNickName>(ColumnValidate);
|
|
}
|
|
|
|
#region ColumnValidates
|
|
|
|
static string? ColumnValidate(IReadOnlyPhoneNumber value)
|
|
{
|
|
if (string.IsNullOrEmpty(value.PhoneNumber))
|
|
{
|
|
return Constants.请输入手机号码哦;
|
|
}
|
|
if (!IsPhoneNumberCorrect(value.PhoneNumber))
|
|
{
|
|
return Constants.请输入正确的手机号码哦;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static string? ColumnValidate(IReadOnlySmsCode value)
|
|
{
|
|
if (string.IsNullOrEmpty(value.SmsCode))
|
|
{
|
|
return Constants.请输入短信验证码哦;
|
|
}
|
|
if (!IsSmsCodeCorrect(value.SmsCode))
|
|
{
|
|
return Constants.短信验证码不正确;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
//static string? ColumnValidate(IReadOnlyBirthDate value)
|
|
//{
|
|
// if (value.BirthDate == default)
|
|
// {
|
|
// return Constants.请输入年龄;
|
|
// }
|
|
// return null;
|
|
//}
|
|
|
|
//static string? ColumnValidate(IReadOnlyGender value)
|
|
//{
|
|
// if (!value.Gender.IsDefined())
|
|
// {
|
|
// return Constants.请选择性别;
|
|
// }
|
|
// return null;
|
|
//}
|
|
|
|
static string? ColumnValidate(IReadOnlyAvatar value)
|
|
{
|
|
if (value.Avatar == default)
|
|
{
|
|
return Constants.请选择头像;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static string? ColumnValidate(IReadOnlyNickName value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value.NickName))
|
|
{
|
|
return Constants.请输入昵称;
|
|
}
|
|
else if (value.NickName.Length > Lengths.NickName)
|
|
{
|
|
return string.Format(Constants.昵称最大长度不能超过_, Lengths.NickName);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Validates
|
|
|
|
/// <summary>
|
|
/// 验证字符串是否为正确的手机号码
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
static bool IsPhoneNumberCorrect(string value)
|
|
// 纯数字, 1开头,11位手机号码
|
|
=> !(value.Length != Lengths.PhoneNumber || value[0] != '1' || !value.IsDigital());
|
|
|
|
/// <summary>
|
|
/// 验证字符串是否为正确的短信验证码
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
static bool IsSmsCodeCorrect(string value)
|
|
=> !(value.Length != Lengths.SMS_CAPTCHA || !value.IsDigital());
|
|
|
|
#endregion
|
|
|
|
private static class Constants
|
|
{
|
|
public const string 请输入手机号码哦 = "请输入手机号码哦";
|
|
|
|
public const string 请输入正确的手机号码哦 = "请输入正确的手机号码哦";
|
|
|
|
public const string 请输入短信验证码哦 = "请输入短信验证码哦";
|
|
|
|
public const string 短信验证码不正确 = "短信验证码不正确";
|
|
|
|
//public const string 请输入年龄 = "请选择年龄";
|
|
|
|
//public const string 请选择性别 = "请选择性别";
|
|
|
|
public const string 请选择头像 = "请选择头像";
|
|
|
|
public const string 请输入昵称 = "请输入昵称";
|
|
|
|
public const string 昵称最大长度不能超过_ = "昵称最大长度不能超过{0}个字";
|
|
|
|
public const string 请输入邀请码哦 = "请输入邀请码哦";
|
|
|
|
public const string 请输入正确的邀请码哦 = "请输入正确的邀请码哦";
|
|
}
|
|
|
|
public static class Lengths
|
|
{
|
|
/// <summary>
|
|
/// 颜色16进制值,#AARRGGBB
|
|
/// </summary>
|
|
public const int ColorHex = 9;
|
|
|
|
/// <summary>
|
|
/// 手机号码
|
|
/// </summary>
|
|
public const int PhoneNumber = PhoneNumberHelper.Length;
|
|
|
|
/// <summary>
|
|
/// 昵称
|
|
/// </summary>
|
|
public const int NickName = 20;
|
|
|
|
/// <summary>
|
|
/// 短信验证码
|
|
/// </summary>
|
|
public const int SMS_CAPTCHA = 6;
|
|
}
|
|
}
|
|
} |