C# 如何在数字模式中只允许一种类型的字符串模式,同时将前3个数字替换为string-regex
我正在用MVC模型编写一个数字模式。我需要两种类型的图案: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
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的模式。所以我在下面对它进行了调整。对于像这篇文章这样的小改动,我可以留下评论,修改它不会花费我超过几分钟的时间。(见更新的较短正则表达式)。