7

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

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

这会检查输入是否正好是 10 个数字字符,我应该如何更改此正则表达式以允许空格使以下所有示例都有效

1234567890
12 34567890
123 456 7890

干杯!

4

5 回答 5

15

这有效:

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

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

于 2012-07-19T03:45:47.810 回答
1

用这个:

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

我作弊了 :) 我刚刚在这里修改了这个正则表达式:

正则表达式计算字符串中逗号的数量

我测试过。这对我来说可以。

于 2012-07-19T03:53:12.957 回答
1

根据您的问题,您可能会考虑使用匹配评估器委托,如http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx中所述

这将使计算数字和/或空格的问题变得简单

于 2012-07-20T21:45:04.193 回答
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
于 2012-07-19T03:42:03.167 回答
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})$
于 2012-07-19T03:48:33.833 回答