具有八位字节通配符和范围的IP地址

时间:2015-08-10 18:01:46

标签: javascript html regex ip-address

我使用此模式检查字段的形式是否为IP地址:

192.168.1.1 --> It will be OK
192.168.*.* --> It will be OK
192.168.2-3.0-128 --> It will be OK
192.168.2-3.* --> It will be OK

但是我需要考虑具有带星号的八位字节的字段的值' *'或范围' 0-255'。

例如:

{{1}}

有什么想法吗?非常感谢你!

2 个答案:

答案 0 :(得分:2)

对于您提供的特定输入字符串,请从以下内容开始:

^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$

Regular expression visualization

Debuggex Demo

在您的JavaScript中,这将成为:

var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$/;

你可以进一步消除模式中的重复,但这将使你从提供的内容的演变开始变得更加清晰:从一个更冗长,重复的模式开始;得到可靠的正面和负面测试;然后重构以根据需要/期望消除重复。

答案 1 :(得分:0)

这里至少有两个问题:

  1. 你的正则表达式应该在允许的位置匹配星号。请参阅J0e3gan的回答中的正则表达式。

  2. 您正在循环遍历match返回的数组的索引0-3。 match返回索引0中的完整字符串以及以下索引中的每个段。因此,您的for循环应如下所示:for (i = 1; i <= 4; i++) { // processing }