IP地址验证的正则表达式

Man*_*aju 24 javascript regex

我想验证值是否有效IP地址..!

我曾经验证过像

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
Run Code Online (Sandbox Code Playgroud)

它的工作正常,但是当我给出类似的值时12345678,它也会返回true ..如何解决这个问题?

Col*_*ert 32

有一种更简单的方法.您只需要打开字符串.并检查每个数字是否在0到255之间.

此外,您可以检查:IPv6的六进制和拆分.


仅仅因为我认为这很有趣:

^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$
Run Code Online (Sandbox Code Playgroud)

这是一个应该处理IP的正则表达式(v4).

  • 他们不必非常吵闹.我打赌你的代码比一个好的正则表达式更长. (3认同)
  • @TJHeuvel,但性能更高:).正则表达式是一个有用的工具,但它是一个很大的引擎,用于执行更复杂的任务,因此在这里使用一个就像使用火箭筒捕捉飞行.你可能会完成它,但代价是什么? (3认同)
  • 我认为这个从你的版本中移除冗余...`(?<!\ S)((\ d | [1-9]\d | 1\d\d | 2 [0-4]\d | 25 [ 0-5])\ C |.?!\\b){7}(\ S)` (2认同)

oha*_*aal 13

寻找一个IPv4,我最终只是自己创建它.(这只处理常见的虚线变体,即0.0.0.0 - 255.255.255.255)

^                           # START OF STRING
  (?=\d+\.\d+\.\d+\.\d+$)     # Lookahead, require this format: number.number.number.number END OF STRING
  (?:                         # Start non-capture group (number 0-255 + optional dot)
    (?:                         # Start non-capture group (number 0-255)
      25[0-5]                     # 250-255
      |                           # OR
      2[0-4][0-9]                 # 200-249
      |                           # OR
      1[0-9]{2}                   # 100-199
      |                           # OR
      [1-9][0-9]                  # 10-99
      |                           # OR
      [0-9]                       # 0-9
    )                           # End non-capture group
    \.?                         # Optional dot (enforced in correct positions by lookahead)
  ){4}                        # End non-capture group (number + optional dot), repeat 4 times
$                           # END OF STRING
Run Code Online (Sandbox Code Playgroud)

没有评论:

^(?=\d+\.\d+\.\d+\.\d+$)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4}$
Run Code Online (Sandbox Code Playgroud)

一些代码来测试它:

function isValidIpv4Addr(ip) {
  return /^(?=\d+\.\d+\.\d+\.\d+$)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4}$/.test(ip);
}
var testAddr = ['192.68.35.35','0.0.0.0','255.0.0.0','192.168.1.0','192.168.0.1','255.255.255.0','1.1.1.1','255.255.255.255','249.249.249.249','200.200.200.200','199.199.199.199','100.100.100.100','99.99.99.99','0.0.0.0','9.9.9.9','10.10.10.10','99.99.99.99','100.100.100.100','109.109.109.109','110.110.110.110','199.199.199.199','200.200.200.200','249.249.249.249','250.250.250.250','255.255.255.255','256.256.256.260','192.168.0.0/24','192.168..1','192.168.1','1','1.','1.1','1.1.','1.1.1','1.1.1.','1.1.1.1.','1.1.1.1.1','.1.1.1.1','01.01.01.01','09.09.09.09','1.0.0.1.0','010.1.1.1','123456','123123123123','.127.0.0.1'];
for (var i = 0; i < testAddr.length; i++) {
  document.getElementById('ipv4tests').innerHTML += '<li>' + testAddr[i] + ' ' + (isValidIpv4Addr(testAddr[i]) ? '<font color="green">VALID!</font>' : '<font color="red">INVALID!</font>') + '</li>';
}
Run Code Online (Sandbox Code Playgroud)
<ul id="ipv4tests"></ul>
Run Code Online (Sandbox Code Playgroud)


kir*_*uga 11

这适用于所有可能的情况.

^(([1-9]?\d|1\d\d|2[0-5][0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|2[0-5][0-5]|2[0-4]\d)$
Run Code Online (Sandbox Code Playgroud)

  • .2 [0-5] [0-5]部分可以修改为25 [0-5],因为2 [0-4]\d匹配从200到249的所有内容.你的答案的一个较短的版本将是'^(([1-9]\d |≤1\ d\d | 25 [0-5] | 2 [0-4]\d)\){3}([1-9]\d | 1\d\d | 25 [0-5] | 2 [0-4]\d)$`很棒的答案,顺便说一句. (2认同)
  • 我通常不信任声称在所有情况下工作的东西_.你有无限的测试吗?或者得出一个数学证明?但是,在这种情况下,我认为这实际上是最好的解决方案,并且可能在所有情况下都能正常工作:) (2认同)

Ism*_*uel 6

我知道这是旧的,但试试这个:

    /^(?:(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)\.){3}(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)(?:\:(?:\d|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]))?$/
Run Code Online (Sandbox Code Playgroud)

我今天为php中的一个函数做了它.

它处理从0.0.0.0到255.255.255.255的ip和从0到65535的端口.

例子:

validates:
    0.0.0.0:0
    255.0.0.0
    192.168.1.0:8080
does not validate:
    192.168.0.0/24
    192.168..1
    192.168.1
Run Code Online (Sandbox Code Playgroud)

我知道这是一个frankenregex,但它仍然有效!

如果端口无关紧要,请使用以下端口:

    /^(?:(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)\.){3}(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)$/
Run Code Online (Sandbox Code Playgroud)