我需要一个从 25 开始的整数的正则表达式,我试过没有限制:
^([2-9]\d[0-9]\d{2,})$
但我需要它从 25 而不是 20 开始,我什至不确定这是否正常工作。
你的正则表达式
^([2-9]\d[0-9]\d{2,})$
将匹配以 5 位或更多位开头2-9
并具有 5 位或更多位的任何数字(\d
,[0-9]
每个贡献一位,\d{2,}
用于另外两位或更多位)。你想要这样的东西:
^0*(1\d\d|2[0-4]\d|2[5-9]|[3-9]\d)\d*$
正如你所看到的,这是相当丑陋的。如果您使用某种编程语言,您应该断言它是一个数字 ( ^\d*$
) 并检查没有正则表达式的范围。
但是我的正则表达式是如何工作的?
首先我们使用前导0
s,因为它们不会改变数字的值。然后我们根据数字的第一个数字进行交替。如果它是 a1
我们知道我们需要至少多两个数字才能大于25
。如果它是 a2
并且第二个数字介于两者之间0
,4
我们还需要另一个数字。如果它是25
or 以3
to开头9
,两位数就足够了。在交替之后,我们只允许任意更多的数字。
您还可以使用正则表达式来检查它的补码:(消除任何不符合条件的东西:即匹配任何小于 25 的东西)
-
(负面)开头的东西[0-2]
以和开头[0-4]
, 和> 200
)在这里测试
^(2[5-9]([0-9])*|[3-9][0-9]+|[1-2][0-9]{2,})$
这是一个比其他一些更简洁的正则表达式:
^(?!(1\d|2[0-4])$)[1-9]\d+$
你可以在这里测试它:http ://www.rubular.com/r/PGdbtGYsWD
方法是只匹配[1-9]\d+
,这将是一个两位或更多位的数字,并在开头使用负前瞻来防止匹配 10 到 24 之间的任何数字。
如果应该允许前导零,只需0*
在^
.
使用正则表达式模式
^(2[5-9]|[3-9]\d|(?!0)\d{3,})$
或(如果您想允许前导零)
^0*(2[5-9]|[3-9]\d|(?!0)\d{3,})$