首页 > 解决方案 > 如何使用 DataAnnotations & Regex - c# - ASP.NET Core

问题描述

我正在使用数据注释来匹配用户为错误处理目的而输入的字段。

每当他们输入不正确的格式时,它就会打印实际的正则表达式,我想知道是否有办法删除“匹配以下正则表达式”并只打印错误消息。

我的表单示例和显示的错误消息: 表单

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace FoodCart.Models
{
    public class Order
    {
        public int ID { get; set; }

        [Display(Name = "First Name")]
        [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]
        [Required(ErrorMessage = "This field is required")]
        public string FirstName { get; set; }

        [Display(Name = "Last Name")]
        [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]
        [Required(ErrorMessage = "This field is required")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "This field is required")]
        public string Address { get; set; }

        [Required(ErrorMessage = "This field is required")]
        public string City { get; set; }

        [Required(ErrorMessage = "This field is required")]
        public string State { get; set; }

        [Required(ErrorMessage = "This field is required")]
        public string Zip { get; set; }

        [Display(Name = "Name on Card")]
        [Required(ErrorMessage = "This field is required")]
        public string NameonCard { get; set; }

        [Display(Name = "Credit Card Number")]
        [Required(ErrorMessage = "This field is required, input valid 16 digit number")]
        [RegularExpression(@" ([0 - 9][0 - 9][0 - 9][0 - 9]) ([0 - 9][0 - 9][0 - 9][0 - 9]) ([0 - 9][0 - 9][0 - 9][0 - 9]) ([0 - 9][0 - 9][0 - 9][0 - 9])")]
        public string CreditCardNum { get; set; }

        [Display(Name = "Expiration Date")]
        [Required(ErrorMessage = "This field is required, input valid expiration date: MM/YY")]
        [RegularExpression(@"([0-9][0-9])\/([0-9][0-9])")]
        public string ExpDate{ get; set; }

        [Display(Name = "CVV")]
        [RegularExpression(@"([0-9][0-9][0-9])")]
        [Required(ErrorMessage = "This field is required")]
        public string cvv { get; set; }

        [Display(Name = "Total")]
        public decimal YourTotal { get; set; }
        public int UserLinkID { get; set; }


    }
}

标签: c#regexasp.net-mvcasp.net-coredata-annotations

解决方案


验证属性都带有一个内置在实现中的默认错误消息。对于RegularExpressionAttribute,此错误消息如下:

字段 {0} 必须与正则表达式“{1}”匹配。

占位符{0}将是正在验证的属性的显示名称,并且{1}将是正则表达式本身。

有几种方法可以自定义此错误消息,使用验证属性上的属性之一。最简单的方法是直接使用ErrorMessage属性指定错误消息。请注意,如果您愿意,您仍然可以引用占位符{0}(用于字段名称)和{1}(用于正则表达式):

[Display(Name = "First Name")]
[RegularExpression(@"^[a-zA-Z'-\s]{1,40}$", ErrorMessage = "The field {0} is not a valid name")]
public string FirstName { get; set; }

推荐阅读