gpt4 book ai didi

javascript - IP 系列的正则表达式?

转载 作者:行者123 更新时间:2023-11-29 10:14:34 25 4
gpt4 key购买 nike

我正在尝试检查输入文本是否是这样的:

(IP| IP1, IP2 | IP1, IP2, IP3) and so on .....

例如 172.25.1.4172.25.1.4, 172.25.1.5
172.25.1.4、172.25.1.6、3.3.3.3 等等...都被接受。

并且 IPS 之间的空间也不是必需的:172.25.1.4,172.25.1.5 被接受

我不知道用什么作为模式:

var pattern = theCorrectPattern

if (!pattern.test(id1) && id1.value!="") {

document.getElementById("id").innerHTML="<p style='color:red'>not correct</p>";

}

else

{
document.getElementById("id").innerHTML="<p></p>";

}

最佳答案

让我们分段构建它。首先,我们需要一个用于单个八位字节(IP 的四个部分之一)的正则表达式。该数字可以从 0 到 255。我们如何使用正则表达式实现这一点?

对于 0-199 的情况,我们可以有一个简单的正则表达式,允许可选的 0 或 1 后跟至少一个但不超过 0-9 范围内的两个数字:

/[01]?[0-9]{1,2}/

现在,我们需要处理 200-255 的情况。这有点复杂;例如,249 有效但 259 无效。因此,我们有另一种模式,需要 2,后跟 0-4 范围内的一位数字,然后是 0-9 范围内的一位数字。这处理 200-249 情况:

/2[0-4][0-9]/

最后,我们需要一个模式来处理最终的 250-255 情况,这应该是相当明显的:

/25[0-5]/

让我们将它们串在一起成为一个正则表达式,我们可以将其用于我们的八位字节:

/([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))/
^ 0-199 case ^ 200s
^ 200-249 ^ 250-255

也许有点笨拙,但它确实有效。让我们把它藏起来,以便在我们即将推出的模式中使用。

var octetPattern = "([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))";

现在,我们需要一个模式来处理其中的四个,以句点分隔。我们通过匹配一个八位位组,然后匹配 3 个(句点,八位位组)来实现这一点。

var ipPattern = octetPattern + "(\\." + octetPattern + "){3}";

快到了。我们的最终模式匹配一​​个 IP 后跟零个或多个(逗号、可选空格、IP):

var ipGroupPattern = ipPattern + "(, *" + ipPattern + ")*";

现在我们使用 anchor 字符从中构建一个 RegExp 对象。 (如果没有它们,该模式将匹配任何包含 IP 组的文本;我们只想匹配完整文本。)

var pattern = new RegExp("^" + ipGroupPattern + "$");

所有这些导致了这个可爱的困惑:

/^([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))(\.([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))){3}(, *([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))(\.([01]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))){3})*$/

( See it run .)

关于javascript - IP 系列的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com