正则表达式的最小整数为25

时间:2012-11-29 16:21:04

标签: regex

我需要一个从25开始的整数的正则表达式,我试过没有限制:

^([2-9]\d[0-9]\d{2,})$

但我需要它从25岁开始而不是20岁,我甚至不确定这是否正常。

5 个答案:

答案 0 :(得分:1)

你的正则表达式

^([2-9]\d[0-9]\d{2,})$

将匹配以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,因为它们不会更改数字的值。然后我们根据数字的第一个数字进行交替。如果它是1我们知道我们至少需要两个数字才能大于25。如果它是2且第二个数字在04之间,我们还需要另一个数字。如果是25或以39开头,则两位数就足够了。在交替之后,我们只允许任意多个数字。

Working demo.

答案 1 :(得分:0)

测试here

^(2[5-9]([0-9])*|[3-9][0-9]+|[1-2][0-9]{2,})$

答案 2 :(得分:0)

您还可以使用正则表达式检查其中的补充:(消除任何不符合条件的内容:即匹配任何小于25的内容)

  • 不是以-(否定)
  • 开头的任何内容
  • 不是这样的:
    • [0-2]
    • 开头
    • 后跟[0-4]
    • 后面跟不是另一个数字(如果后跟另一个数字,那么你有> 200
  • 不包含非数字字符的任何内容

答案 3 :(得分:0)

这是一个比其他一些更简洁的正则表达式:

^(?!(1\d|2[0-4])$)[1-9]\d+$

您可以在此处进行测试:http://www.rubular.com/r/PGdbtGYsWD

方法是匹配[1-9]\d+,这将是一个两位或更多位数字,并在开头使用negative lookahead来阻止10到24之间任何数字的匹配。

如果应该允许前导零,只需在0*之后直接添加^

答案 4 :(得分:0)

使用正则表达式

^(2[5-9]|[3-9]\d|(?!0)\d{3,})$

或(如果你想允许前导零)

^0*(2[5-9]|[3-9]\d|(?!0)\d{3,})$