Skip to main content
 首页 » 编程设计

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

2024年01月18日41lexus

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

^\d{7}

我如何改进它以使其接受七位或十位数字的数值?

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

请您参考如下方法:

一个简单的解决方案是这样的:

^\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