0

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

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

4 回答 4

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)

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

于 2013-01-20T22:43:34.797 回答
0

这应该工作

^(([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4]))\.(?1)\.(?1)\.(?1)$
于 2013-01-20T22:46:09.690 回答
0

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

([1-9]\d{0,3}\.){3}[1-9]\d{0,3}

编辑:我睡着了,错过了上限为 0.254 的部分。有机会我会更新的。

于 2013-01-20T22:44:32.667 回答
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]$)

于 2013-02-18T14:10:17.867 回答