C# 用于验证多个值范围(.NET)的正则表达式
我可以选择使用正则表达式来验证一些值,我想知道最好的方法 我有几个范围(不在同一个正则表达式/验证中),例如1-9(这很简单:p),和: 1-99C# 用于验证多个值范围(.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-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]");