Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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# 用于验证多个值范围(.NET)的正则表达式_C#_.net_Regex - Fatal编程技术网

C# 用于验证多个值范围(.NET)的正则表达式

C# 用于验证多个值范围(.NET)的正则表达式,c#,.net,regex,C#,.net,Regex,我可以选择使用正则表达式来验证一些值,我想知道最好的方法 我有几个范围(不在同一个正则表达式/验证中),例如1-9(这很简单:p),和: 1-99 1-999 1-9999 另外,我需要检查前导零,所以0432可能匹配 我知道正则表达式可能不是解决这个问题的最佳方法,但这是我所拥有的,也是我必须使用的框架的一部分。简单的方法(n是数字的数量): 我不是100%清楚你想要什么,但也许是这样的 \d{1,2} 这相当于\d\d?,将匹配任何一位或两位数字,即0到99之间的任何数字,包括前导零 如果

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

我有几个范围(不在同一个正则表达式/验证中),例如1-9(这很简单:p),和:

1-99
1-999
1-9999

另外,我需要检查前导零,所以0432可能匹配

我知道正则表达式可能不是解决这个问题的最佳方法,但这是我所拥有的,也是我必须使用的框架的一部分。

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


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

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

如果您真的想排除
0
,那么事情就会变得复杂得多

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

0?[123456789]|[123456789]\d
现在,
|
前面的部分将检查它是否是一个小于10的数字,可选前导零。第二个选项将检查它是否是一个不以零开头的两位数


通过扩展此选项,可以检查其余范围。

所有其他答案都存在一个基本缺陷。

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]”和非(0)|(00)|(000)|(0000))来表示,但这可能不是一个单一的正则表达式答案。

请给出您想要的更多详细信息,最好是关于有效值和无效值的示例。你好,Bobby。我试过这样做。但有时我不想要第一个0。
bool isMatch = Regex.IsMatch("9999", @"(^\d{2,n}$)|[1-9]");