正则表达式,使用csv验证字符串格式为特定长度

时间:2014-09-08 12:09:08

标签: c# asp.net regex asp.net-mvc-3 pattern-matching

我正在尝试编写一个正则表达式,该表达式验证文本框只有长度为5或9的数字。我找到了以下正则表达式来完成此操作

^\d{1,5}([,]\d{5})*$

但它无法正确修复我的要求,任何人都可以帮我修改或编写支持以下模式的新正则表达式。

  • 09103,09101,有效 (以逗号结尾)
  • 09103,09101 有效 (不以逗号结尾)
  • 12345,1234567 无效 (如果第一个数字的长度为5且第二个数字少于9,则不应支持
  • 12345,123456789 有效 (必须仅支持数字长度5或9)

3 个答案:

答案 0 :(得分:1)

请尝试以下方法:

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

您可以在此处运行:C# Fiddle

答案 1 :(得分:0)

试试这个,确切的测试用例。

^\d{5},?$|^\d{5},\d{5},?$|^\d{5},\d{9},?$

它使用|字符来分隔&#39;替代&#39;模式,读作&#34;或&#34;。即。

^\d{5}$  OR  ^\d{5},\d{5}$  OR  ^\d{5},\d{9}$

答案 2 :(得分:0)

只需将逗号前面的部分设为可选部分,以便它只匹配1234512345,

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

DEMO