正则数字范围,没有前导零

时间:2013-01-20 22:39:07

标签: regex

我正在尝试验证这种模式:

1.1.1.1最高为254.254.254.254,但没有前导零。所以001.001.001.001不应该匹配。

我有

/^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-4])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-4])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-4])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-4])$/

但这与前导零相匹配。任何人都可以推荐如何解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

每个元素都是:

[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]

零件细分:

(1-99)      (100-199)   (200-249)   (250-254)

哦,还有一件我应该提到的......你需要在第2,第3和第4位处理数字0。因此,只需在这些组中为单个0数字添加一个额外选项。我不认为将零作为IP地址中的第一个数字是有效的(尽管如果它是掩码,它是有效的。)

答案 1 :(得分:0)

对于像这样的重复模式,使用编号重复很方便。以下内容应与您之后的内容相匹配

([1-9]\d{0,3}\.){3}[1-9]\d{0,3}
编辑:我睡着了,错过了部分上限为.254。我有机会时会更新。

答案 2 :(得分:0)

这应该有效

^(([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4]))\.(?1)\.(?1)\.(?1)$

答案 3 :(得分:0)

试试这个。

([1-9]$|[1-9][0-9]$|[12][0-9][0-9]$)\.([0-9]$|[1-9][0-9]$|[12][0-9][0-9]$)\.([0-9]$|[1-9][0-9]$|[12][0-9][0-9]$)\.([1-9]$|[1-9][0-9]$|[12][0-9][0-9]$)