zoukankan      html  css  js  c++  java
  • 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    本文属转载,来源:

    http://www.byywee.com/page/M0/S868/868615.html

    关于Model验证官方资料:

    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx 

    ASP.NET MVC3中的Model是自验证的,这是经由过程.NET4的System.ComponentModel.DataAnnotations定名空间完成的。 我们要做的只是给Model类的各属性加上对应的验证标识表记标帜(Attributes)就可以让MVC3框架帮我们完成验证。我以MVC3项目模板自带的登录 做例子讲解Model的验证。


    一、启用客户端验证:


    客户端验证主如果为了进步用户体验,在网页不回刷的景象下完成验证。


    第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了:


    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>  

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


    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>  

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


    @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")  

    另一种是Model中各属性对应HTML控件的验证消息:


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

    二、在Model中参加验证标识表记标帜


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


    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; }
    }  

     对比通俗的C#类,我们发明每个属性上都多了被方括号“[]”包抄的标识表记标帜。此中,[Required]是验证标识表记标帜的一种,而[Display]、[DataType]则是为了显示对应的HTML控件,这不在本文评论辩论局限之内。

    除了Required,我们还可以在Model中添加其他有效的验证标识表记标帜。下面是个较完全的列表:

    Model类中可以添加的验证标识表记标帜:

    1. 必填字段
    [Required]
    public string FirstName { get; set; }
    2. 字段长度
    至多n位:
    [StringLength(160)]
    public string FirstName { get; set; }
    请求至少n位:
    [StringLength(160, MinimumLength=3)]
    public string FirstName { get; set; }

    3. 正则验证

    [RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”)]
    public string Email { get; set; }

    4. 局限
    [Range(35,44)]
    public int Age { get; set; }
    小数的景象:
    [Range(typeof(decimal), “0.00”, “49.99”)]
    public decimal Price { get; set; }

    5. 办事端参与的验证

    [Remote(“CheckUserName”, “Account”)]
    public string UserName { get; set; }
    然后在AccountController里指定一个CheckUserName办法:
    public JsonResult CheckUserName(string username)
    {
        var result = Membership.FindUsersByName(username).Count == 0;
        return Json(result, JsonRequestBehavior.AllowGet);
    }
     6. 斗劲
    [RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”)]
    public string Email { get; set; }
    [Compare(“Email”)]
    public string EmailConfirm { get; set; }

    7. 自定义错误消息
    正则:
    [RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”,
    ErrorMessage=”Email doesn’t look like a valid email address.”)]
    public string Email { get; set; }

    通俗文本:

    [Required(ErrorMessage=”Your last name is required”)]
    [StringLength(160, ErrorMessage=”Your last name is too long”)]
    public string LastName { get; set; }

    占位符:

    [Required(ErrorMessage=”Your {0} is required.”)]
    [StringLength(160, ErrorMessage=”{0} is too long.”)]
    public string LastName { get; set; } 

    三、后台Action的写法

    Action里要做的有两件事:断定ModelState是否合法、添加错误消息。MVC3模板自带的登录Action如下:

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("///"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }
     
        // If we got this far, something failed, redisplay form
        return View(model);
    }  

    [HttpPost]默示这个Action只能经由过程POST动作调用,这是为了共同View里的表单,因为FORM的ACTION是POST(当然也可所以GET),不过这不在本文的评论辩论局限内。


    if (ModelState.IsValid) 是重点,若是不出不测,即客户端浏览器没有封闭JavaScript,并且客户不是个黑客(黑客可能会经由过程一些对象模仿POST),那只要经由过程正常路子 POST到这个Action的Model都应当是IsValid的。当然,编程的一个首要原则是不克不及信赖用户的输入,所以我们有须要再断定一次 ModelState.IsValid。

    ModelState.AddModelError办法是给View返回一个错误消息,终极交给@Html.ValidationSummary显示。

    最后附上常用正则表达式(网上找的)

    数字:"^[0-9]*¥"。

    n位的数字:"^/d{n}¥"。

    至少n位的数字:"^/d{n,}¥"。

    m~n位的数字:。"^/d{m,n}¥"

    零和非零开首的数字:"^(0|[1-9][0-9]*)¥"。

    有两位小数的正实数:"^[0-9]+(.[0-9]{2})?¥"。

    有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?¥"。

    非零的正整数:"^/+?[1-9][0-9]*¥"。

    非零的负整数:"^/-[1-9][]0-9"*¥。

    长度为3的字符:"^.{3}¥"。

    由26个英文字母构成的字符串:"^[A-Za-z]+¥"。

    由26个大写英文字母构成的字符串:"^[A-Z]+¥"。

    由26个小写英文字母构成的字符串:"^[a-z]+¥"。

    由数字和26个英文字母构成的字符串:"^[A-Za-z0-9]+¥"。

    由数字、26个英文字母或者下划线构成的字符串:"^/w+¥"。

    验证用户暗码:"^[a-zA-Z]/w{5,17}¥"正确格局为:以字母开首,长度在6~18之间,只能包含字符、数字和下划线。

    验证是否含有^%&’,;=?¥/"等字符:"[^%&’,;=?¥/x22]+"。

    只能输入汉字:"^[/u4e00-/u9fa5]{0,}¥"

    验证Email地址:"^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*¥"。

    验证InternetURL:"^http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?¥"。

    验证德律风号码:"^(/(/d{3,4}-)|/d{3.4}-)?/d{7,8}¥"正确格局为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

    验证身份证号(15位或18位数字):"^/d{15}|/d{18}¥"。

    验证一年的12个月:"^(0?[1-9]|1[0-2])¥"正确格局为:"01"~"09"和"1"~"12"。

    验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)¥"正确格局为;"01"~"09"和"1"~"31"。
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/gsydw/p/7267321.html
Copyright © 2011-2022 走看看