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