Expressão regular para validação de endereço IP

Eu quero validar o valor é válido endereço IP ou não ..!

Eu costumava validar como

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])$"; 

ele está funcionando bem, mas quando eu dou os valores como 12345678 , ele também retorna true .. Como resolver isso?

Existe uma maneira mais simples. Você só precisa dividir a string . e verifique se todos os números estão entre 0 e 255.

Além disso, você pode verificar hexa e dividir em : para IPv6.


Só porque eu acho engraçado:

 ^(\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]))$ 

Aqui está uma regex que deve lidar com IPs (v4).

Isso funciona corretamente para todos os casos possíveis.

 ^(([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)$ 

Procurando por um para IPv4, acabei criando apenas eu mesmo. (Isso só lida com a variante pontilhada comum, ou seja, 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 

Sem comentários:

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

Algum código para testá-lo:

 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 += '
  • ' + testAddr[i] + ' ' + (isValidIpv4Addr(testAddr[i]) ? 'VALID!' : 'INVALID!') + ''; }
  •  

      Eu sei que isso é antigo, mas tente este:

        /^(?:(?: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]))?$/ 

      Eu fiz hoje para uma function em php.

      Ele lida com ip’s de 0.0.0.0 a 255.255.255.255 e portas de 0 a 65535.

      Exemplos:

       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 

      Eu sei que isso é um frankenregex, mas ainda assim, funciona!

      Se a porta não importa, use esta:

        /^(?:(?: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)$/ 

      Tente este encurtado:

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

      Aqui está o caso de teste para este regex:

        function verifyIp(ip) { return /^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(\.(?!$)|(?=$))){4}$/.test(ip||""); } ["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"].forEach(function(item){ is_valid = verifyIp(item); $('
      '+item+' '+(is_valid?'VALID':'INVALID')+'
      ').appendTo('#result'); });
       .item { font-weight: bold; } .wrong { color: red; } .correct { color: green; } 
        

      Aqui está a solução:

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

      Você também pode tentar isso:

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

      Queremos que o padrão se repita exatamente quatro vezes – neste caso, nosso padrão é um número no intervalo de 0 a 255, precedido por um período . ou o começo da corda! Como o início da string pode ocorrer apenas uma vez, as outras três ocorrências devem ser períodos.

      Por favor, veja esta demonstração do Regex 101 para uma explicação completa.

      Apenas ampliando a excelente solução da @DavidFaber. Para corresponder a uma notação IPv4 ” decimal pontuado ” (sem intervalo / portas):

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

      Exemplos de correspondência: https://regex101.com/r/vX2hK4/15

      Código de golfe alguém?

      Este ex reg funciona bem, mas confia em mim é um exagero.
      Para ter comparações condicionais como aqui menos de 255, é melhor ter uma combinação de RegEx e condicionais.

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

      você pode simplesmente usar este regex para validar qualquer endereço IP sem número de porta, como este formato (192.168.1.1)

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

      TENTE ISSO,

       ValidIpAddressRegex = "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" 

      tentando encurtar a versão de Grealy

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

      Nota: como a versão anterior, isso não lida corretamente com números octais, como 0177.0.0.1

      Você também pode verificar com minhas expressões dadas, eu verifiquei e escrevi um programa em java para validar o endereço ipv4. Retorna true se o endereço Ipv4 estiver correto ou vice-versa.

      Padrão de cadeia = “^ ([01]? \ D \ d? | 2 [0-4] \ d | 25 [0-5]) \. ([01]? \ D \ d? | 2 [0-4 ] \ d | 25 [0-5]) \. ([01]? \ d \ d? | 2 [0-4] \ d | 25 [0-5]) \. ([01]? \ d \ d [2] [0-4] \ d | 25 [0-5]) $ ”

       import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Scanner; class Solution{ public static void main(String []args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String IP = in.next(); System.out.println(IP.matches(new MyRegex().pattern)); } } } class MyRegex{ String pattern="^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\dCongrats, you solved this challenge!\\d?|2[0-4]\\d|25[0-5])$"; } 

      Colin Hebert apontou a melhor solução. Mas ninguém “explicou”, fornecendo o código para isso, então aqui vai (“Só porque eu acho engraçado:”;)

       var aIP = [ '192.168.0.1', '255.255.255.255', '1.2.34.647', '256.0.0.0', '255,0,0,0', '123.123.123', '1.2.3.4.5' ]; aIP.forEach(function(ipAddr) { var a = ipAddr.split('.'), cnt = 4; document.write('Testing ' + ipAddr + '
      '); try { a.forEach(function(v) { if( v<0 || v>255 ) throw false; cnt--; }); if( cnt!=0 ) throw false; cnt--; document.write('- Pass!
      '); } catch (e) { document.write('- Fail!
      '); } });

      Tente isso também:

       (((?< ![\d])([0-9][\.])|(? 

      Embora esta seja uma pergunta de 5 anos de idade, então eu duvido que você ainda está procurando a resposta.

      postou mais informações em outro tópico: Validando endereços IPv4 com regexp

      para o padrão ex 192.168.23.28/255.255.255.0

       ^(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-4]|2[0-4][0-9]|[01]?[1-9][0-9]?)\/(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254)))$ 

      para o padrão ex 192.168.26.82/24 ou 192.168.23.28/255.255.255.0

       ^(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-4]|2[0-4][0-9]|[01]?[1-9][0-9]?)\/([1-9]|1[0-9]|2[0-9]|3[0-2]|(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254))))$ 

      para o padrão ex 192.168.26.28

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

      para a netmask ex 255.255.255.0

       ^(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254)))$ 

      Isso deve funcionar

       ^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$