正则表达式100 - 2000步骤100

时间:2017-02-06 15:08:21

标签: regex

我没有正则表达专家,但我已经给它一个去,这里是我提出的:

^([1]*[1-9]00|1000|2000)$

这个想法是允许100到2000,包括100步。

我已手动测试过它。它(似乎)工作,但这是最好的解决方案吗?任何人都可以看到任何明显的错误吗?

感谢您的反馈。

2 个答案:

答案 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)

首先,正则表达式不是此类任务的最佳解决方案。正则表达式可以匹配任意字符序列;你想使用数字和你使用的编程语言可能比正则表达式更能帮助你。

但是,如果你坚持,你的正则表达式必须是整数100200 ...... 90010001100 ...... 2000

匹配这些数字的正则表达式以00结尾。前缀匹配从19的整数,两个数字的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]119之间的数字相匹配,但10除外。 1020匹配[12]0