正则表达式验证几个值范围(.NET)

时间:2010-09-14 11:59:46

标签: c# .net regex

我可以选择使用正则表达式来验证某些值,我想知道最好的方法。

我有几个范围(不在相同的正则表达式/验证中),例如1-9(这很容易:P),并且:

1-99
1-999
1-9999

另外,我需要检查前导零,因此,0432可能是匹配。

我知道Regex可能不是最好的方法,但它就是我拥有的,它是我必须使用的框架的一部分。

3 个答案:

答案 0 :(得分:1)

基本缺陷包含所有其他答案!!

bool isMatch = Regex.IsMatch("9999", @"\d{1,3}");

虽然数字不是1-3位数,但返回true。这是因为单词的一部分与表达式匹配。

您需要使用:

bool isMatch = Regex.IsMatch("9999", @"^\d{1,n}$");

其中n是最大位数。

<强>更新

为了确保它不为零,请将其更改为:

bool isMatch = Regex.IsMatch("9999", @"(^\d{2,n}$)|[1-9]");

更新2 如果我们有00或000或0000,它仍然无法工作。我的大脑疼,我稍后再看看。我们可以把它作为两个表达式(“(^ \ d {2,n} $)| [1-9]”和NOT(0)|(00)|(000)|(0000))但这可能不是被接受为单一的正则表达式答案。

答案 1 :(得分:0)

简单方法( n 是数字的数量):

[0-9]{n}

答案 2 :(得分:0)

我不是100%清楚你想要什么,但也许是这样的?

\d{1,2}

这相当于\d\d?,将匹配任何一位或两位数字,即0到99之间的任意数字,包括前导零。

如果你真的想要排除0,那么很多会更加复杂。

基本上,您需要明确检查1-9和01-09。第三组允许的数字将有两个数字 not 以零开头:

0?[123456789]|[123456789]\d

现在|之前的部分将检查它是否是低于10的数字,可选的前导零。第二种方法是检查它是否是一个两位数的数字而不是从零开始。

可以通过扩展此范围来检查其余范围。