Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要一个正则表达式来验证给定字符串中至少7个数字_C#_.net_Regex_Validation - Fatal编程技术网

C# 我需要一个正则表达式来验证给定字符串中至少7个数字

C# 我需要一个正则表达式来验证给定字符串中至少7个数字,c#,.net,regex,validation,C#,.net,Regex,Validation,我想确认一个电话号码。 我的条件是,我希望给定字符串中最少有7个数字,忽略分隔符X和paranethes 实际上我想在regex中实现这个功能: Func<string, bool> Validate = s => s.ToCharArray().Where(char.IsDigit).Count() >= 7; Func<string, bool> RegexValidate = s => System.Text.RegularExpressions.

我想确认一个电话号码。 我的条件是,我希望给定字符串中最少有7个数字,忽略分隔符X和paranethes

实际上我想在regex中实现这个功能:

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
Func Validate=s=>s.ToCharArray().Where(char.IsDigit).Count()>=7;
Func RegexValidate=s=>System.Text.RegularExpressions.Regex.IsMatch(s,@“Regex模式应该在这里出现”)
字符串x=“asda 1234567 sdfasdf”;
字符串y=“asda sdfa 123456 sdfasdf”;
bool xx=验证(x)//真的
bool yy=验证(y)//假的
我需要的目的是在asp:RegularExpressionValidator中包含此正则表达式

(?:\d.*){7,}
  • (?:…)
    -将包含的模式分组为一个原子单元
  • \d
    -匹配一个数字
  • *
    匹配任何字符中的0个或多个
  • {7,}
    匹配前面的7个或更多模式
如果要忽略的唯一分隔符是空格、破折号、括号和字符“X”,请改用此分隔符:

(?:\d[- ()X]*){7,}
  • […]
    创建一个字符类,与包含的任何一个字符匹配
例如,区别在于第一个正则表达式将匹配
“a1b2c3d4e5f6g7h”
,而第二个正则表达式将不匹配

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


根据“it only”指示正则表达式是否在输入字符串中找到匹配项,“not”要求它匹配整个字符串,因此您不需要修改我的示例来让它们工作。

七个或更多数字,与任何其他类型的字符混合?这似乎不是一个非常有用的要求,但您可以这样做:

^\D*(?:\d\D*){7,}$

为什么要对此使用正则表达式?您发布的第一个
Validate
函数简单地计算了位数,它更容易理解,也可能更快。我只需放弃不必要的
ToCharArray
调用,将谓词折叠到
Count
函数中,然后使用它:

s.Count(char.IsDigit) >= 7;
请注意,如果您只想接受“正常”数字(即0-9),则需要更改验证功能,因为
IsDigit
匹配许多不同的数字表示,例如

s.Count(c => c >= '0' && c <= '9') >= 7;
s.Count(c=>c>='0'&&c=7;

这是唯一一个能满足OP要求的正则表达式。干得好,谢谢,最后,这就是我想要验证的。句号。@activa-我看不出我的正则表达式哪里出了问题。如果你能给我解释一下,我会很感激你的教育!
\d
\d
\d
的意思是任何不是数字的东西。再次,请注意NET正则表达式中的一个数字包含阿拉伯数字,因此这可能不是您想要的。有关详细信息,请访问Raymond Chen的博客:老实说,对于您的应用程序,如果您真的只想找到7个或更多数字…您可能不需要正则表达式…它的效率会低于您自己。为什么需要正则表达式呢?@shimmy:为什么不干脆告诉我们为什么你需要一个正则表达式…我相信我们都在想。这种气味对我来说像是hw。正则表达式不是检查字符串是否大于等于7个数字的方法。@Shimmy:911;)可能有国家代码小于7位的电话号码。国家代码和区号只需要五位数字(包括加号,国际号码需要加号,但您的验证不允许加号,因此只有四位)(例如汉堡将是+4940),现在实际电话号码还剩下三位数字。在较小的国家,这可能会更少。把数字限制在7是没有意义的,除非你能确定不会有更短的数字。如果一些用户不得不添加他们的国家代码,这将是一个负担。-1完全拒绝回答任何人的问题,以充实其目的和用途。原因是客户不需要其他验证。他只想这样。我需要一个asp:RegularExpressionValidator。@Shimmy:而不是说“它不工作”。。。你给rampion看一个它失败的输入怎么样。。。我认为很明显,他想理解为什么这是错误的(乍一看,他的正则表达式似乎是正确的)。(再说一次,不管怎么说,使用正则表达式似乎很愚蠢)。@Shimmy-the
/…/
是表示正则表达式开始和结束的传统方式。有些语言(如C#)不在正则表达式中使用它们,有些语言(如perl、ruby和awk)使用它们。它们可能就是这些例子对你不起作用的原因。我希望其他人能证实这个正则表达式是有效的。。。因为我认为rampion应该得到一些赞扬,因为他从一开始就拥有它。@rampion,第二个正则表达式中的字符类
[-()X]
相当于
[!“#$%&'()X]
-你忘了逃出连字符。@nasch:阿拉伯文字中的东方阿拉伯数字。你所说的阿拉伯数字是拉丁文字中的阿拉伯数字。我想这对中列出的所有数字都是正确的。重点是
\d
匹配
2
٣
-但是
int.Parse
引发了defaul的异常t(即不变文化)关于后者。刚刚用LinqPad验证了这一点。@Shimmy:你告诉我们你需要正则表达式的所有时间都可以用来告诉我们为什么……我认为Greg提出这个替代方案是完全正确的,因为它是解决你试图解决的主要问题的更好方法……的确。很多人说他们需要一些东西,但是这往往是因为他们不知道自己真正需要什么,而这正是他们认为自己应该得到的