构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(33)-数据验证共享

2020-12-13 05:55

阅读:447

标签:style   blog   class   c   code   java   

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(33)-数据验证共享

注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力

一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证

单单的用js实现的前端验证是极其不安全的,所以本次我们来看看MVC上的自带的注解验证,自定义验证

同样的MVC提供了一系列内置的数据验证注解

  1. 不为空验证  [Required(ErrorMessage = "不能为空")]
  2. 长度验证     [StringLength(10, MinimumLength = 2)]  
  3. 取值范围     [Range(1, 3)]
  4. 类型验证     [DataType(DataType.Date)]
  5. 正则表达     [RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”)]   Email Demo
  6. 远程验证     [Remote("CheckUserNameExists", "ValidationDemo", ErrorMessage = "用户名已存在")]
  7. 请求验证     [AllowHtml] 允许传入HTML
  8. 等等.....

MVC3项目模板自带的登录模型类如下:

soscw.com,搜素材
public class LogOnModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }
 
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
 
    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
} 
soscw.com,搜素材

MVC3自带的模板项目中已经有了:



然后在被验证的View页面上要参加如许两个JavaScript,重视,他们是依附于JQuery的:



验证消息的显示有两种,一种是ValidationSummary,它可以显示一份验证消息的汇总,包含从后台Action里返回的消息。

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
另一种是Model中各属性对应HTML控件的验证消息:

@Html.ValidationMessageFor(m => m.UserName)

所以要前端代码有验证效果必须引入jquery库

但是往往系统自带的验证是远远满足不了我们的,我们需要更加灵活的封装,不可能我要验证数字是否填了 0-9之间都要去写一个表表达式吧,还好官方也灵活的提供了扩展,自定义验证。

自定义验证我就不多说了,在园里搜索一下就很多原理及编写方法。这里我为大家共享一个常用的自定验证

soscw.com,搜素材soscw.com,搜素材
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Globalization;
using System.Web.Security;
using System.Text.RegularExpressions;


namespace App.Models
{
    /** 使用说明
        * 继承 ValidationAttribute 抽象类,重写 IsValid() 方法,以实现服务端验证
        * 实现 IClientValidatable 接口的 GetClientValidationRules() 方法,以实现客户端验证
        * 
        * 1.   [IntRangeExpression(18, 30)]           数字在18与30之间,可以不填写,但填写就进入验证
        * 2.   [MaxWordsExpression(50)]               字符数在不能大50,可以不填写,但填写就进入验证
        * 3.   [NotNullExpression]                    验证是否为空且 调用
        * 4.   [DateExpression]                       是否是日期格式:2012-10-1
        * 5.   [IsCharExpression]                     只能是数字,字母,下划线,中划线组成,可以不填写
        * 6.   [ChinaCharExpression]                  只能输入汉字,可以不填写
        * 7.   [NotEqualExpression("abcd")]           不能等于指定的值,可以不填写:如不能等于abcd
        * 8.   [ContainExpression("abc")]             验证是否包含指定字符串,可以不填写:如必须包含abc
        * 9.   [NotContainExpression("abc")]          验证不能指定字符串,可以不填写,如不能含有abc
        *10.   [IsIntegerEpression]                   验证是否是数字格式 可以不填写,可以为任意整数 1,-5
        *11.   [IsPositiveIntegerExpression]          验证是否是数字格式,可以不填写,必须是任意正整数 25
        *12.   [IsNegativeIntegerExpression]          验证是否是数字格式,可以不填写,必须是任意负整数 -25
        *13.   [IsDecimalExpression]                  验证是否是数字格式 可以不填写,可以为任意浮点数 12.12,12,-12.12
        *14.   [IsPositiveDecimalExpression]          验证是否是数字格式 可以不填写,可以为任意正浮点数 1.4
        *15.   [IsNegativeDecimalExpression]          验证是否是数字格式 可以不填写,可以为任意负浮点数 -1.2
        *16.   [EmailExpression]                      验证是否是Email 
        *17.   [PhoneExpression]                      验证是否是中国电话号码 如:0769-222222-222 正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
        *18.   [SiteExpression]                       验证是否是一个完整的网址 如:www.163.com
        *19.   [IsNumberExpression]                   验证是否是数字格式 可以不填写,可以为任意数字
        * 
        * 
        * 组合使用演示
        * [DisplayName("姓名")]                       名称
        * [NotNullExpression]                         不能为空
        * [MaxWordsExpression(50)]                    最多50个字符,25个汉字
        * [IsCharExpression]                          只能由数字,字母,中划线,下划线组成(一般用于验证ID)
        * [NotEqualExpression("admin")]               不能包含有admin字符串
        * public string Id { get; set; }
        * 
        * 数字判断演示
        *  [IsNumberExpression]  可以不填写,填写判断是否是数字
        *  [DisplayName("代号")]
        *  public int? age { get; set; }
        * 非空字断使用 
        * //[Required(ErrorMessageResourceType = typeof(ErrorRs), ErrorMessageResourceName = "IsNumberExpression")]
        *  或//[Required(ErrorMessage="必须填写这个字段")] 来覆盖本地化 如public int age; int?为可空字端
        **/
    /// 
    ///  [IntRangeExpression(18, 30)] 数字在18与30之间,可以不填写,但填写就进入验证
    /// 
    public class IntRangeExpressionAttribute : ValidationAttribute, IClientValidatable
    {
        long minMum { get; set; }
        long maxMum { get; set; }
        public IntRangeExpressionAttribute(long minimum, long maximum)
        {
            minMum = minimum;
            maxMum = maximum;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            long intValue = Convert.ToInt64(value);
            return intValue >= minMum && intValue  maxMum;
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                 "{0}必须在{1}和{2}之间", name, minMum, maxMum);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "isinteger",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            // 向客户端验证代码传递参数
            validationRule.ValidationParameters.Add("param1", minMum);
            validationRule.ValidationParameters.Add("param2", maxMum);
            yield return validationRule;
        }
    }
    /// 
    ///   [MaxWordsExpression(50)]字符数在不能大50,可以不填写,但填写就进入验证
    /// 
    public class MaxWordsExpressionAttribute : ValidationAttribute, IClientValidatable
    {

        int maxStr { get; set; }
        public MaxWordsExpressionAttribute(int maximum)
        {
            maxStr = maximum;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string valueAsString = value.ToString();

            return (Encoding.Default.GetByteCount(valueAsString)  maxStr);

        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                 "{0}最多{1}个汉字,{2}个字符", name, maxStr / 2, maxStr);

        }
        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "maxwords",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            validationRule.ValidationParameters.Add("param", maxStr);
            yield return validationRule;
        }
    }

    /// 
    ///   [MinWordsExpression(50)]字符数在不能少于50个字符,可以不填写,但填写就进入验证
    /// 
    public class MinWordsExpressionAttribute : ValidationAttribute, IClientValidatable
    {

        int minStr { get; set; }
        public MinWordsExpressionAttribute(int minimum)
        {
            minStr = minimum;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string valueAsString = value.ToString();

            return (Encoding.Default.GetByteCount(valueAsString) >= minStr);

        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                 "{0}最少{1}个字符", name, minStr);

        }
        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "minwords",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            validationRule.ValidationParameters.Add("param", minStr);
            yield return validationRule;
        }
    }
    /// 
    /// [NotNullExpression] 验证是否为空且不能有空格 调用
    /// 
    public class NotNullExpressionAttribute : ValidationAttribute, IClientValidatable
    {
        static string DispalyName = "";
        public NotNullExpressionAttribute()
            : base("{0}必须填写")
        {
        }
        public override string FormatErrorMessage(string name)
        {
            return String.Format(name, DispalyName);
        }

        public override bool IsValid(object value)
        {
            if (value == null)
            {
                return false;
            }
            string valueAsString = value.ToString();
            bool result = !string.IsNullOrEmpty(valueAsString);
            return result;

        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            DispalyName = metadata.DisplayName;
            return new[]{
                new ModelClientValidationRequiredRule(FormatErrorMessage("{0}必须填写"))
            };
        }
    }
    /// 
    ///   [DateExpression] 是否是日期格式:2012-10-1
    /// 
    public class DateExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))";
        public DateExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            string valueAsString = value.ToString();
            string dtvalue;
            if (value.ToString().IndexOf(" ") > 0)
            {
                dtvalue = valueAsString.Replace("/", "-").Substring(0, valueAsString.IndexOf(" "));
            }
            else
            {
                dtvalue = valueAsString.Replace("/", "-");
            }
            Match mch = reg.Match(dtvalue);
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是日期格式:2012-10-10", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    ///  [IsCharExpression] 只能是数字,字母,下划线,中划线组成,可以不填写
    /// 
    public class IsCharExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^[0-9A-Za-z_-]{0,}$";
        public IsCharExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
            "{0}由字母,数字,划线,划线组成", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    ///  [ChinaCharExpression] 只能输入汉字,可以不填写
    /// 
    public class ChinaCharExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^[\u4e00-\u9fa5]{0,}$";
        public ChinaCharExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}只能填写汉字", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    ///   [NotEqualExpression("abcd")],不能等于指定的值,可以不填写:如不能等于abcd
    /// 
    public class NotEqualExpressionAttribute : ValidationAttribute, IClientValidatable
    {
        string InputString { get; set; }
        public NotEqualExpressionAttribute(string inputString)
        {
            InputString = inputString;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string valueAsString = value.ToString();

            return (valueAsString != InputString);

        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                 "{0}不能等同于{1}", name, InputString);

        }
        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "notequal",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            validationRule.ValidationParameters.Add("param", InputString);
            yield return validationRule;
        }
    }
    /// 
    /// [ContainExpression("abc")]  验证是否包含指定字符串,可以不填写:如必须包含abc
    /// 
    public class ContainExpressionAttribute : ValidationAttribute, IClientValidatable
    {
        string InputString { get; set; }
        public ContainExpressionAttribute(string inputString)
        {
            InputString = inputString;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string valueAsString = value.ToString();
            return (valueAsString.Contains(InputString));
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                "{0}必须不能包含字符串:{1}", name, InputString);

        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "contain",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            validationRule.ValidationParameters.Add("param", InputString);
            yield return validationRule;
        }
    }
    /// 
    ///  [NotContainExpression("abc")],验证不能指定字符串,可以不填写,如不能含有abc
    /// 
    public class NotContainExpressionAttribute : ValidationAttribute, IClientValidatable
    {
        string InputString { get; set; }
        public NotContainExpressionAttribute(string inputString)
        {
            InputString = inputString;
        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string valueAsString = value.ToString();
            return (!valueAsString.Contains(InputString));
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
                 "{0}必须不能包含字符串:{1}", name, InputString);

        }
        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule validationRule = new ModelClientValidationRule()
            {
                ValidationType = "notcontain",
                ErrorMessage = FormatErrorMessage(metadata.DisplayName)
            };
            validationRule.ValidationParameters.Add("param", InputString);
            yield return validationRule;
        }
    }
    /// 
    /// [IsNumberExpression] 验证是否是数字格式,可以不填写,必须是任意数字
    /// 
    public class IsNumberExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^[-]?\d+(\.\d+)?$";
        public IsNumberExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            string input = value.ToString();
            Match mch = reg.Match(input);
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个数字", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [IsIntegerExpression] 验证是否是数字格式,可以不填写,必须是任意整数 -1,1
    /// 
    public class IsIntegerExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^-?\d+$";
        public IsIntegerExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个整数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }


    /// 
    /// [IsPositiveIntegerExpression] 验证是否是数字格式,可以不填写,必须是任意正整数 25
    /// 
    public class IsPositiveNumberExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^\d+$";
        public IsPositiveNumberExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个正整数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [IsNegativeIntegerExpression] 验证是否是数字格式,可以不填写,必须是任意负整数 -25
    /// 
    public class IsNegativeNumberExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^-?\d+$";
        public IsNegativeNumberExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个负整数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [IsDecimalExpression] 验证是否是数字格式 可以不填写,可以为任意浮点数 12.12,12,-12.12
    /// 
    public class IsDecimalExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^[-]?\d+(\.\d+)?$";
        public IsDecimalExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个浮点数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [IsPositiveDecimalExpression] 验证是否是数字格式 可以不填写,可以为任意正浮点数 1.4
    /// 
    public class IsPositiveDecimalExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^\d+(\.\d+)?$";
        public IsPositiveDecimalExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个浮正点数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [IsNegativeDecimalExpression] 验证是否是数字格式 可以不填写,可以为任意负浮点数 -1.2
    /// 
    public class IsNegativeDecimalExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^-\d+(\.\d+)?$";
        public IsNegativeDecimalExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是一个浮负点数", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    ///  [EmailExpression] 验证是否是Email 
    /// 
    public class EmailExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$";
        public EmailExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            Regex reg = new Regex(regStr);
            Match mch = reg.Match(value.ToString());
            if (mch.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture,
              "{0}必须是邮箱地址", name);
        }

        public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var name = metadata.GetDisplayName();
            var rule = new ModelClientValidationRegexRule(FormatErrorMessage(name), Pattern);
            yield return rule;
        }
    }
    /// 
    /// [PhoneExpression] 验证是否是中国电话号码 如:0769-222222-222 正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
    /// 
    public class PhoneExpressionAttribute : RegularExpressionAttribute, IClientValidatable
    {
        static string regStr = @"^((0\d{2,5}-)|\(0\d{2,5}\))?\d{7,8}(-\d{3,4})?$";
        public PhoneExpressionAttribute()
            : base(regStr)
        {

        }

        public override bool&g


评论


亲,登录后才可以留言!