Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数字模式中只允许一种类型的字符串模式,同时将前3个数字替换为string-regex_C#_Regex_Asp.net Mvc - Fatal编程技术网

C# 如何在数字模式中只允许一种类型的字符串模式,同时将前3个数字替换为string-regex

C# 如何在数字模式中只允许一种类型的字符串模式,同时将前3个数字替换为string-regex,c#,regex,asp.net-mvc,C#,Regex,Asp.net Mvc,我正在用MVC模型编写一个数字模式。我需要两种类型的图案: 12345-1234567-1 或DDD45-1234567-1 其中数字可以是任何数字0-9。但是只有3D可以代替模式的开始。DDD应该是固定的 这是我的密码: [Required] [Display(Name = "NIC #")] [RegularExpression(@"^[[D]{3}[0-9]{2}]|[[0-9]{5}]-[0-9]{7}-[0-9]{1}$", ErrorMessage = "Must be a vali

我正在用MVC模型编写一个数字模式。我需要两种类型的图案:

12345-1234567-1
或
DDD45-1234567-1

其中数字可以是任何数字0-9。但是只有3D可以代替模式的开始。DDD应该是固定的

这是我的密码:

[Required]
[Display(Name = "NIC #")]
[RegularExpression(@"^[[D]{3}[0-9]{2}]|[[0-9]{5}]-[0-9]{7}-[0-9]{1}$", ErrorMessage = "Must be a valid NIC Number")]
public string NIC { get; set; }

非常感谢您的帮助。

您可以使用以下正则表达式:

@"^(?:D{3}|\d{3})\d{2}-\d{7}-\d$"
  • [D\D]{3}
    将在输入开始时匹配3位
    D
  • \d{2}
    将匹配两位数字
  • -
    将匹配文字连字符
  • \d{7}
    将匹配7位数字
  • -
    将匹配文字连字符
  • \d$
    将在行尾前匹配一个位数

    • 感谢阿努巴夫的帮助。我调整了我的正则表达式以满足我的要求。 这就是我所做的

      @"^(DDD|\d\d\d)\d{2}-\d{7}-\d$"
      
      • (DDD |\d\d\d)
        返回的数字要么正好是3位,要么正好是3位
      • \d{2}
        后跟两位数字
      • -
        匹配了文字连字符
      • \d{7}
        匹配了7位数字
      • -
        匹配了文字连字符
      • \d$
        与行尾前的最后一位匹配

      生成的输出类似于
      12345-1234567-1
      或类似于
      DDD45-1234567-1

      Anubhava,感谢您的解决方案,但您的代码正在接受类似D2D2D45-1234567-1的模式。所以我在下面对它进行了调整。对于像这篇文章这样的小改动,我可以留下评论,修改它不会花费我超过几分钟的时间。(见更新的较短正则表达式)。