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

标签 c# regex

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

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

相关文章:

c# - XML 序列化 : The type of the argument object 'Sw' is not primitive

javascript - 正则表达式匹配特定的域格式

javascript - 删除括号前后的所有空格

java - 在每个单词周围添加引号

java - 需要正则表达式 : It should match for following patterns

c# - 更新 asp.net 中的 web.config 文件

c# - 手动实现UpdatePanel

c# - 在 .Net 中使用 ObjectCache 缓存对象并过期

c# - 在相同属性上将一个对象映射到另一个对象的表达式

regex - 如何使用正则表达式将所有内容移动到 Notepad++ 中的一行