【问题标题】:Regular expression to validate string format to specific length with csv使用 csv 将字符串格式验证为特定长度的正则表达式
【发布时间】:2014-09-08 12:09:07
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这是22,67567, 45365, 有效吗?
  • 看来是对的,你能给出你是如何检查的代码吗?
  • @AvinashRaj :这是错误的。第一个值是 22,它不应该匹配。我们想要 12345 或 123456789

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


【解决方案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

【讨论】:

  • 你能改变这个吗。如果我只给 12345 它也应该工作
  • 我添加了“just 12345”条件。
【解决方案2】:

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

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

DEMO

【讨论】:

  • 似乎运行良好。让我测试更多场景。会将您的答案标记为正确
【解决方案3】:

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

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

它使用| 字符来分隔“替代”模式,将其读作“或”。即

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

【讨论】:

  • 如果我将值设为 12345 或 12345,应该也可以,但它不适用于您的解决方案。
  • 已更新为包含单个五位数字大小写。还有其他情况吗?像一个九位数字还是两个九位数字?
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多