我目前有以下正则表达式来接受任何七位数的数值
^\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
