C# 一个字符串中至少一定位数的正则表达式

C# 一个字符串中至少一定位数的正则表达式,c#,asp.net,regex,C#,Asp.net,Regex,当用户提交表单时,我需要确保输入至少包含最少位数。问题是我不知道输入的格式是什么。数字可能不在一行中,可能由字母、标点符号、空格等分隔。我不关心字符串的其余部分 我想用RegularExpressionValidator检查一下,但我不太确定如何编写正则表达式 我想这类似于电话号码正则表达式,但电话号码至少有一些通用格式。以下内容将匹配至少包含n数字的输入字符串: Regex.IsMatch(input, @"(\D*\d){n}"); 其中n是一个整数值 简短的解释: \D*匹配零个或多个

当用户提交表单时,我需要确保输入至少包含最少位数。问题是我不知道输入的格式是什么。数字可能不在一行中,可能由字母、标点符号、空格等分隔。我不关心字符串的其余部分

我想用RegularExpressionValidator检查一下,但我不太确定如何编写正则表达式


我想这类似于电话号码正则表达式,但电话号码至少有一些通用格式。

以下内容将匹配至少包含
n
数字的输入字符串:

Regex.IsMatch(input, @"(\D*\d){n}");
其中
n
是一个整数值

简短的解释:

  • \D*
    匹配零个或多个非数字字符(
    \D
    [^0-9]
    [^\D]
    的缩写)
  • 所以
    \D*\D
    匹配零个或多个非数字字符,后跟一个数字
  • (\D*\D){n}
    分组并重复前面的
    n

    • 我会这样处理:

      Regex.IsMatch(input, @"^([^0-9]*[0-9]){10}.*$");
      换句话说,这将搜索10个数字,每个数字由0个或更多字符包围。由于.*是贪婪的,因此任何额外的数字也将由它们匹配


      无论如何,要编写一个没有测试对象的正则表达式是非常困难的。

      为了至少有n个数字,您需要使用以下正则表达式:

      (\D*\D){n,}

      正则表达式(\D*\D){n}将恰好匹配n个数字


      你好,卡洛。

      我思考了一会儿,得出结论,没有重复的模式是不可能做到的。但一旦你看到它,它就非常明显。优雅+1@David,谢谢@安娜卡塔,我在我的帖子里添加了更多的解释。谢谢你,巴特!我不得不同意大卫说的话。很好的解决方案:)@Bart,有没有一种方法可以使这个值最小,而不是一个固定的数字?我试着用
      {n,}
      替换
      {n}
      ,但结果失败了。它也开始计算非数字。我对.NET正则表达式引擎不太熟悉,但我想说,
      {n,}
      也应该有用。这样,
      @(\D*\D){n}
      会使引擎至少查找
      n
      出现的
      (\D*\D)
      ,因此使用
      {n}
      {n,}
      都不会有任何区别。对不起,我不能再帮你了+谢谢你的帮助。我一直在使用regexpal.com,但那一个看起来好一点。谢谢你的链接。