C# 使用csv验证特定长度字符串格式的正则表达式

C# 使用csv验证特定长度字符串格式的正则表达式,c#,asp.net,regex,asp.net-mvc-3,pattern-matching,C#,Asp.net,Regex,Asp.net Mvc 3,Pattern Matching,我正在尝试编写一个正则表达式,它验证一个文本框是否只有长度为5或9的数字。我找到了下面的正则表达式来完成这项工作 ^\d{1,5}([,]\d{5})*$ 但它不能正确地解决我的需求,请任何人帮助我修改或编写一个新的正则表达式,它支持下面的模式 0910309101,有效(以逗号结尾) 0910309101有效(不以逗号结尾) 123451234567无效(如果第一个数字的长度为5,第二个数字的长度小于9,则不应支持) 12345123456789有效(必须仅支持数字长度5或9) 请尝试以下

我正在尝试编写一个正则表达式,它验证一个文本框是否只有长度为5或9的数字。我找到了下面的正则表达式来完成这项工作

^\d{1,5}([,]\d{5})*$
但它不能正确地解决我的需求,请任何人帮助我修改或编写一个新的正则表达式,它支持下面的模式

  • 0910309101,有效(以逗号结尾)
  • 0910309101有效(不以逗号结尾)
  • 123451234567无效(如果第一个数字的长度为5,第二个数字的长度小于9,则不应支持)
  • 12345123456789有效(必须仅支持数字长度5或9)

请尝试以下操作:

var lines = new []
{
    "09103,09101,",
    "09103,09101",
    "12345,1234567",
    "12345,123456789",
    "12345"
};

var re = new Regex(@"^\d{1,5}(,(\d{5}|\d{9}))?,?$");

foreach (var line in lines)
{
    Console.WriteLine("{0} = {1}", line, re.IsMatch(line) ? "Valid" : "Invalid");
}
输出

09103,09101, = Valid
09103,09101 = Valid
12345,1234567 = Invalid
12345,123456789 = Valid
12345 = Valid

您可以在这里运行它:

对于您的确切测试用例,尝试一下这个

^\d{5},?$|^\d{5},\d{5},?$|^\d{5},\d{9},?$
它使用
|
字符来分隔“可选”模式,读作“或”。即


只需将前面带有逗号的部分设置为可选,这样它将只匹配
12345
12345,

^(?:\d{5}|\d{9})(?:,(?:\d{5}|\d{9}))?,?$

这是
2267567
45365,
有效吗?看起来是对的,你能给出你如何检查的代码吗?@AvinashRaj:这是错误的。第一个值是22,它不应该匹配。我们想要12345或123456789,你能改一下吗。如果我只给出12345,它也应该起作用。我添加了“仅给出12345”条件。如果我给出的值为12345或12345,它也应该起作用,但与您的解决方案不起作用。已更新,以包括单个五位数的情况。还有其他情况吗?像一个九位数的数字或两个九位数的数字?似乎工作得很好。让我再测试一些场景。我会把你的答案标记为正确的
^(?:\d{5}|\d{9})(?:,(?:\d{5}|\d{9}))?,?$