我可以选择使用正则表达式来验证某些值,我想知道最好的方法。
我有几个范围(不在相同的正则表达式/验证中),例如1-9(这很容易:P),并且:
1-99
1-999
1-9999
另外,我需要检查前导零,因此,0432可能是匹配。
我知道Regex可能不是最好的方法,但它就是我拥有的,它是我必须使用的框架的一部分。
答案 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的数字,可选的前导零。第二种方法是检查它是否是一个两位数的数字而不是从零开始。
可以通过扩展此范围来检查其余范围。