如何使这个正则表达式允许空格c#

时间:2012-07-19 03:36:25

标签: c# regex

我有一个带有以下正则表达式的电话号码字段:

[RegularExpression(@"^[0-9]{10,10}$")]

这个检查输入正好是10个数字字符,如何更改此正则表达式以允许空格使以下所有示例验证

1234567890
12 34567890
123 456 7890

喝彩!

5 个答案:

答案 0 :(得分:12)

这有效:

^(?:\s*\d\s*){10,10}$

说明:

^ - start line
(?: - start noncapturing group
\s* - any spaces
\d - a digit
\s* - any spaces
) - end noncapturing group
{10,10} - repeat exactly 10 times
$ - end line

这种构造这个正则表达式的方法也是相当可扩展的,以防你不得不忽略任何其他字符。

答案 1 :(得分:1)

使用此:

^([\s]*\d){10}\s*$

我被骗了:)我刚刚修改了这个正则表达式:

Regular expression to count number of commas in a string

我测试了。它对我来说很好。

答案 2 :(得分:1)

根据您的问题,您可以考虑使用匹配评估代理,如http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx

中所述

这会使计算数字和/或空格的问题缩短

答案 3 :(得分:0)

使用这个简单的正则表达式

var matches = Regex.Matches(inputString, @"([\s\d]{10})");

修改

var matches = Regex.Matches(inputString, @"^((?:\s*\d){10})$");

解释

   ^             the beginning of the string

  (?: ){10}      group, but do not capture (10 times):

  \s*            whitespace (0 or more times, matching the most amount possible)

  \d             digits (0-9)

  $              before an optional \n, and the end of the string

答案 4 :(得分:0)

我认为^\d{2}\s?\d\s?\d{3}\s?\d{4}$

这样的事情

有变体:10位数或2位数空格8位数或3位数空格3位数空格4位数。

但是如果你只想要这3个变体就可以使用这样的东西

^(?:\d{10})|(?:\d{2}\s\d{8})|(?:\d{3}\s\d{3}\s\d{4})$