我需要一个正则表达式,验证给定字符串中的最小7位数

Shi*_*mmy 15 .net c# regex validation

我想验证一个电话号码.我的条件是我想要给定字符串中的最小7个数字,忽略分隔符,X,parantheses.

其实我想在正则表达式中实现这个功能:

Func<string, bool> Validate = s => s.ToCharArray().Where(char.IsDigit).Count() >= 7;
Func<string, bool> RegexValidate = s => System.Text.RegularExpressions.Regex.IsMatch(s, @"regex pattern should come here.")
string x = "asda 1234567 sdfasdf";
string y = "asda   sdfa 123456 sdfasdf";

bool xx = Validate(x); //true
bool yy = Validate(y); //false
Run Code Online (Sandbox Code Playgroud)

我需要的目的是我想在asp:RegularExpressionValidator中包含这个正则表达式

Ala*_*ore 37

七个或更多数字,与任何其他类型的字符混合?这似乎不是一个非常有用的要求,但在这里你去:

^\D*(?:\d\D*){7,}$
Run Code Online (Sandbox Code Playgroud)

  • 再次,请注意.NET的正则表达式中的数字包括阿拉伯数字,因此这可能不是您想要的.有关Raymond Chen博客的更多详情,请访问http://blogs.msdn.com/oldnewthing/archive/2004/03/09/86555.aspx (3认同)
  • 这是OP所需的唯一正则表达式.做得好 (2认同)
  • 谢谢,最后,这就是我想要验证的。时期。 (2认同)
  • @activa - 我看不出我的失败之处。如果你能向我解释一下,我将不胜感激! (2认同)

ram*_*ion 7

(?:\d.*){7,}
Run Code Online (Sandbox Code Playgroud)
  • (?:...) - 将包含的模式分组为原子单元
  • \d - 匹配一个数字
  • .* 匹配任何字符的0或更多
  • {7,} 匹配前面模式的7个或更多

如果您要忽略的唯一分隔符是空格,破折号,括号和字符"X",则使用此代码:

(?:\d[- ()X]*){7,}
Run Code Online (Sandbox Code Playgroud)
  • [...] 创建一个字符类,匹配任何一个包含的字符

不同之处在于,例如,第一个正则表达式将匹配"a1b2c3d4e5f6g7h",而第二个正则表达式将不匹配.

正如Gregor在评论中指出的那样,正则表达式的选择取决于你使用它的功能.某些函数期望正则表达式匹配整个字符串,在这种情况下,您应该.*在前面添加一个额外的内容以匹配7位数之前的任何填充.有些人只希望正则表达式匹配字符串的一部分(这是我在我的例子中所期望的).

根据它的文档IsMatch()只"指示正则表达式是否在输入字符串中找到匹配",不要求它匹配整个字符串,因此您不需要修改我的示例以使它们起作用.

  • @Shimmy:而不只是说"它不起作用"......你怎么表现出一种失败的输入......我认为很明显他想明白为什么它是错的(一目了然,他的正则表达式似乎是正确的).(再次,这对你来说使用正则表达式似乎很愚蠢). (2认同)