我目前有以下的正则表达式接受任何数值,是七位数经常用于验证数值
表达^\d{7}
如何改善它,所以它会接受的数值七八十个数字?
通行证:,1234567,,123467890
失败:123456,12345678,123456789
我目前有以下的正则表达式接受任何数值,是七位数经常用于验证数值
表达^\d{7}
如何改善它,所以它会接受的数值七八十个数字?
通行证:,1234567,,123467890
失败:123456,12345678,123456789
一个简单的解决办法是这样的:
^\d{7}(\d{3})?$
至少有两件事情与此解决方案注意:
\d
可能比你想要的要多得多(例如digi的外来字符其他非拉丁语言)。(?: ...)
来解决此问题。所以你可能要改用这稍长表达这些原因:
^[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
这不会接受7到10位数字吗? – 2010-05-25 21:07:12
对不起,我误解了这个问题。现在修好! – 2010-05-25 21:07:54
你是对的;它会接受7到10个字符。 – 2010-05-25 21:09:20
@Mark你的意思是因为它没有尾随'$'?我把它排除在外,因为OP确实,但是,在技术上:) – 2010-05-25 21:09:51
是的,但它与原始正则表达式的“松散”相匹配。:) – 2010-05-25 21:10:02
@Mark它如果你正在做全字符串匹配 – 2010-05-25 21:15:51
何不的字面解释你在找什么:
^\d{7}|\d{10}$
为了便于阅读 – 2010-05-25 21:25:12
除了这样也不能正常工作,因为这实际上是'^ \ d {7}'或'\ d {10} $'。您需要在其中添加一个非捕获组,例如'^(?:\ d {7} | \ d {10})$'。 – 2010-05-25 21:30:42
+ +1为了让机器做好工作,而不是我 – Bananeweizen 2010-05-25 21:31:37
您使用什么语言?并非所有的正则表达式都是相等的。 – 2010-05-25 21:23:07
@Mark:我正在使用C#。 – 2010-05-25 21:25:28