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

如何使此正则表达式允许空格c#,c#,regex,C#,Regex,我有一个带有以下正则表达式的电话号码字段: [RegularExpression(@"^[0-9]{10,10}$")] 这个检查输入正好是10个数字字符,我应该如何更改这个正则表达式以允许空格来验证以下所有示例 1234567890 12 34567890 123 456 7890 干杯 使用这个简单的正则表达式 var matches=Regex.matches(inputString,@“([\s\d]{10})” 编辑 var matches = Regex.Matches(inpu

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

[RegularExpression(@"^[0-9]{10,10}$")]
这个检查输入正好是10个数字字符,我应该如何更改这个正则表达式以允许空格来验证以下所有示例

1234567890
12 34567890
123 456 7890
干杯

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

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
这项工作:

^(?:\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

这种构造这个正则表达式的方法在您必须忽略任何其他字符的情况下也是相当可扩展的。

类似这样的东西我认为
^\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})$
使用以下命令:

^([\s]*\d){10}\s*$
我作弊:)我只是在这里修改了这个正则表达式:


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

根据您的问题,您可以考虑使用匹配计算器委托,如

中所描述的。
这将很快解决数字和/或空格计数问题

您确定这是正确的正则表达式吗?这看起来更像一个电子邮件验证器。
[\s\d]{10}
不起作用-它需要10个字符,其中一些是空格,一些是数字。@Ria您对代码的测试不够好
Console.WriteLine(Regex.Match(新字符串(“”,10),@“([\s\d]{10})”).Success)
明确打印
true
。仍然错误:
Console.WriteLine(Regex.Match(新字符串('0',11),@“((?:\s*\d){10}”)。成功)打印
true
。您需要检查字符串的开头和结尾。参见Eugene的答案。顺便说一句,
\s
将匹配任何空格,而不仅仅是空格字符。OP可能想匹配任何空格,但他确实说了“空格”。@Michael Graczyk-很好
\s
确实会匹配各种类型的空格(不确定是否全部匹配,如零宽度空格和其他奇特的空格)。如果只允许使用其中的一些字符,如按空格键获得的“``字符,则可能会将它们列为
[]*
或“*`而不是
\s*
,谢谢Eugene,这是一个很好的解释,该解决方案将空格计算为10个字符的一部分。用纯正则表达式方法只计算数字要困难得多,也更混乱。@Dominic Cronin-事实上,它计算
(?:)
组的
\s*\d\s*
。只要稍加修改,它就可以计算任何其他组。目前,一个组正好包含一个数字,这就产生了10个组,每组1个数字,以及未知类型的未知数量的空白。