Regex de Dirección IPv4
El patrón de arriba solo coincide con direcciones IPv4 válidas. Coincide con 192.168.1.1, 10.0.0.255, 172.16.0.1, 255.255.255.0, 8.8.8.8, 0.0.0.0 y 127.0.0.1. Rechaza 999.999.999.999, 256.1.1.1 y 1.2.3 (solo tres octetos).
Desglose del Patron
Cada octeto usa una alternancia de tres vias para forzar el rango 0-255:
| Rama de alternancia | Rango cubierto | Ejemplos de coincidencia |
|---|---|---|
25[0-5] | 250-255 | 250, 255 |
2[0-4]\d | 200-249 | 200, 214, 249 |
[01]?\d\d? | 0-199 | 0, 99, 192 |
Por qué Falla el Patron Simple
\d+\.\d+\.\d+\.\d+ es lo primero que la mayoría intenta. Falla de dos maneras:
Coincide con cadenas que no son direcciones IP válidas. 999.999.999.999 coincide porque \d+ no impone un limite numérico.
Puede producir falsos positivos dentro de cadenas más largas. Sin limites de palabra, el patrón coincide con partes parciales en cadenas de versión, tiempos Unix y números decimales.
Notación CIDR
Para coincidir también con bloques CIDR como 192.168.1.0/24, agrega (\/([0-9]|[1-2]\d|3[0-2]))? al final del patrón base (antes del \b final).
Patron IPv6
Para la notación completa estándar de 8 grupos:
([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
Detección de Redes Privadas
Los tres rangos IPv4 privados definidos por RFC 1918:
| Rango | CIDR | Prefijo regex |
|---|---|---|
| Clase A privada | 10.0.0.0/8 | ^10\. |
| Clase B privada | 172.16.0.0/12 | `^172.(1[6-9] |
| Clase C privada | 192.168.0.0/16 | ^192\.168\. |
Cuando Omitir el Regex
Para validar una única dirección IP enviada por el usuario, usa las funciones incorporadas del lenguaje:
import ipaddress
try:
ipaddress.ip_address("192.168.1.1")
# válido
except ValueError:
# invalido
const net = require('net');
net.isIPv4('192.168.1.1'); // true
net.isIPv4('999.1.1.1'); // false
import "net"
ip := net.ParseIP("192.168.1.1")
// ip != nil significa válido