用于验证数值的正则表达式

时间:2010-05-25 21:05:03

标签: c# regex

我当前有以下正则表达式来接受任何七位数的数值

^\d{7}

如何改进它以便接受七位或十位数字?

通行证:0123456,1234567,0123456789,123467890
失败:123456,12345678,123456789

3 个答案:

答案 0 :(得分:5)

一个简单的解决方案就是:

^\d{7}(\d{3})?$

此解决方案至少需要注意两件事:

  • 在unicode上下文\d可能比您预期的要多得多(例如,其他非拉丁语言中的数字的外来字符)。
  • 此正则表达式包含一个捕获组。你可能不希望这样。您可以通过将其更改为非捕获组(?: ... )来解决此问题。

因此,出于这些原因,您可能希望使用这个稍长的表达式:

^[0-9]{7}(?:[0-9]{3})?$

这是C#中的一个小测试平台,以便您可以看到它的工作原理:

for (int i = 0; i < 12; ++i)
{
    string input = new string('0', i);
    bool isMatch = Regex.IsMatch(input, "^[0-9]{7}(?:[0-9]{3})?$");
    Console.WriteLine(i.ToString().PadLeft(2) + ": " + isMatch);
}

结果:

 0: False
 1: False
 2: False
 3: False
 4: False
 5: False
 6: False
 7: True
 8: False
 9: False
10: True
11: False

答案 1 :(得分:3)

编辑:这是错误的,但我会取消删除它并留待它参考,因为upvotes建议人们认为它是正确的。正确的解决方案是here


我想:

^\d{7}\d{3}?

答案 2 :(得分:2)

为什么不对你要找的东西进行字面解释:

^\d{7}|\d{10}$