我目前有以下正则表达式来接受任何七位数的数值
^\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
关于c# - 用于验证数值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2908527/