IPv4 Adres Regex’i
Yukarıdaki desen yalnızca geçerli IPv4 adresleriyle eşleşir. Test stringlerinden 192.168.1.1, 10.0.0.255, 172.16.0.1, 255.255.255.0, 8.8.8.8, 0.0.0.0 ve 127.0.0.1 ile eşleşir. 999.999.999.999, 256.1.1.1 ve 1.2.3’ü (sadece üç sekizli) reddeder.
Desen Ayrıştırması
Her sekizli, 0-255 aralığını zorlamak için üç yönlü bir alternasyon kullanır:
| Alternasyon dalı | Kapsanan aralık | Örnek eşleşmeler |
|---|---|---|
25[0-5] | 250-255 | 250, 255 |
2[0-4]\d | 200-249 | 200, 214, 249 |
[01]?\d\d? | 0-199 | 0, 99, 192 |
Basit Desen Neden Başarısız Olur
\d+\.\d+\.\d+\.\d+ çoğu kişinin denediği ilk şeydir. İki yönde başarısız olur:
Geçerli IP adresleri olmayan stringlerle eşleşir. 999.999.999.999 eşleşir çünkü \d+ sayısal değere sınır koymaz.
Daha uzun stringlerin içinde yanlış pozitifler üretebilir. Kelime sınırları olmadan, desen sürüm stringlerinde, Unix zamanlarında ve ondalık sayılarda kısmi parçaları eşleştirir.
CIDR Gösterimi
192.168.1.0/24 gibi CIDR bloklarını da eşleştirmek için, temel desenin sonuna (son \b’den önce) (\/([0-9]|[1-2]\d|3[0-2]))? ekleyin.
IPv6 Deseni
Standart 8 grup tam gösterim için:
([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
Özel Ağ Algılama
RFC 1918 tarafından tanımlanan üç özel IPv4 aralığı:
| Aralık | CIDR | Regex öneki |
|---|---|---|
| A Sınıfı özel | 10.0.0.0/8 | ^10\. |
| B Sınıfı özel | 172.16.0.0/12 | `^172.(1[6-9] |
| C Sınıfı özel | 192.168.0.0/16 | ^192\.168\. |
Regex’i Ne Zaman Atlamalı
Kullanıcı tarafından gönderilen tek bir IP adresini doğrulamak için dil yerleşiklerini kullanın:
import ipaddress
try:
ipaddress.ip_address("192.168.1.1")
# geçerli
except ValueError:
# geçersiz
const net = require('net');
net.isIPv4('192.168.1.1'); // true
net.isIPv4('999.1.1.1'); // false