我没有正则表达专家,但我已经给它一个去,这里是我提出的:
^([1]*[1-9]00|1000|2000)$
这个想法是允许100到2000,包括100步。
我已手动测试过它。它(似乎)工作,但这是最好的解决方案吗?任何人都可以看到任何明显的错误吗?
感谢您的反馈。
答案 0 :(得分:3)
您的正则表达式有效,请注意[1] == 1
。另一种选择是:
^(1?[1-9]00|[12]000)$
请参阅demo。
如果您正在使用服务器端验证,请选择int操作而不是正则表达式:if (myNumber >= 100 && myNumber <= 2000 && myNumber % 100 == 0)
示例:
var random = new Random(100);
int myNumber;
for (int i = 0; i < 5000; i++)
{
myNumber = random.Next(0, 10000);
if (myNumber >= 100 && myNumber <= 2000 && myNumber % 100 == 0)
{
Console.WriteLine($"{myNumber} respect the conditions.");
}
}
答案 1 :(得分:1)
首先,正则表达式不是此类任务的最佳解决方案。正则表达式可以匹配任意字符序列;你想使用数字和你使用的编程语言可能比正则表达式更能帮助你。
但是,如果你坚持,你的正则表达式必须是整数100
,200
...... 900
,1000
,1100
...... 2000
匹配这些数字的正则表达式以00
结尾。前缀匹配从1
到9
的整数,两个数字的1
作为第一个数字和20
。
放在一起,正则表达式是:
([1-9]|1[0-9]|20)00
件:
( # start a group
[1-9] # match any digit between 1 and 9...
| # ... or ...
1[0-9] # ... match any 2-digit number that starts with 1
| # ... or ...
20 # match 20
) # end o the group
00 # match 00
另一个正则表达式是:
(1?[1-9]|[12]0)00
它以不同的方式对值1..20
进行分组。
(
1? # match 1 or nothing
[1-9] # match any digit between 1 and 9
| # ... or ...
[12]0 # match 1 or 2 followed by 0 (i.e. match 10 or 20)
)
00 # end with 00
1?[1-9]
与1
和19
之间的数字相匹配,但10
除外。 10
与20
匹配[12]0
。