C#使用正则表达式校验数据正确性

在信息系统的数据保存中,往往对数据的格式或者内容进行校验,成功后再允许保存,往往程序员需要在业务层保存数据前进行校验,需要耗费大量的时间。为了解决团队重复写代码的情况,则在数据层下增加了正则表达式校验的过程,当然不能100%能使用该方法,有些是具有很强的逻辑性的,但从使用效果来看,起码满足95%以上的需求。

思路比较简单,就是在实体上打上校验标签,例如字符串长度限制

在此举例

1、定义校验基类

 [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public class CustomValidationAttribute : System.Attribute
    {
        protected string _regex;
        protected string _errMsg;

        public CustomValidationAttribute(string regex, string errMsg)
        {
            _regex = regex;
            _errMsg = errMsg;
        }

        public virtual RValue<bool> IsValid(object value)
        {
            if (Equals(value, null))
            {
                return "校验值不能是空值";
            }
            var b = Regex.IsMatch($"{value}", _regex);
            if (b)
                return true;
            return _errMsg;
        }
    }

2、定义一个IDCardAttribute,限定字符串是身份证

    public class IDCardAttribute : CustomValidationAttribute
    {
        public IDCardAttribute(string errMsg = "校验的值不是身份证号码") : base(@"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)", errMsg)
        {

        }
    }

2、定义一个实体

public class Employee

{

        public string ID {get;set;}

        [IDCard]

        public string IDCard {get;set;}

}

3、定义一个校验器DataValidator,这个校验器其实就是对实体进行反射,对每个包含CustomValidationAttribute标注的字段进行校验,调用IsValid(object value)方法,只要返回false,则把校验的消息作为错误提示信息返回给用户。这个类没有设么技术性,就是简单的反射,就不贴代码了。

如果在开发框架中具有数据访问层基类,且

微软也在net5.0(好像是)以后就有自带的类似功能,但是在net461(旧的程序还在用这个东东)只能自己写校验功能了,也为了框架尽量减少引用,例如去掉微软带的MemeoryCache太过于庞大。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值