
Poniższy snippet to wyrażenie regularne, które sprawdza poprawność adresów IP. Działa tak samo w JavaScripcie, w PHP i w HTML, a na jego bazie przygotowałem kilka wygodnych funkcji sprawdzających, czy adres IP ma poprawny format.
Wyrażenie regularne regex IPv4
(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}Wyrażenie regularne regex IPv6
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))Wersja JavaScript
Format zależy od wersji protokołu: adres IPv4 wygląda tak 0.0.0.0.
Adres IPv6 wygląda tak: 2001:0db8:3c4d:0015:0000:d234::3eee:0000
Funkcja przyjmuje adres IP jako ciąg znaków i porównuje go z wyrażeniem regularnym. Jeśli ciąg nie pasuje do formatu, funkcja zwraca false, jeśli pasuje, zwraca true.
wyrażenie regularne adres ip javascript
/**
* Walidacja adresu IP wyrażeniem regularnym
*
* Jeśli adres IP jest nieprawidłowy, zwraca false, w przeciwnym razie IPv4 albo IPv6
*
* @param ip
* @return Boolean
*/
function validateIP(ip){
if(isIPv4(ip)) {
return 'IPv4';
} elseif (isIPv6(ip)) {
return 'IPv6';
}
return false;
}
/**
* Walidacja adresu IPv4 wyrażeniem regularnym
*
* Jeśli adres IP jest nieprawidłowy, zwraca false
*
* @param ip
* @return Boolean
*/
function isIPv4(ip){
var Reg = new RegExp(/^(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/i);
return Reg.test(ip);
}
/**
* Walidacja adresu IPv6 wyrażeniem regularnym
*
* Jeśli adres IP jest nieprawidłowy, zwraca false
*
* @param ip
* @return Boolean
*/
function isIPv6(ip){
var Reg = new RegExp(/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/i);
return Reg.test(ip);
}Użycie wyrażenia w JavaScripcie
Najprościej wykorzystać to wyrażenie wewnątrz warunku IF, tak jak poniżej.
let ip;
if(ip = validateIP('192.168.0.1')){
alert(ip + "valide");
} else {
alert("Adresse IP Invalide");
}
if(ip = validateIP('2001:0db8:3c4d:0015:0000:d234::3eee:0000')){
alert(ip + "valide");
} else {
alert("Adresse IP Invalide");
}
See the Pen
Valider une adresse IP avec une expression régulière by Damien Flandrin (@dam62500)
on CodePen.0
Wersja PHP
Żeby odczytać adres IP w PHP, oprzyj się na$_SERVER[’REMOTE_ADDR’] , które zawiera rzeczywisty adres łączącej się strony. To najbardziej wiarygodna wartość, jaką dostaniesz.
Klient może jednak siedzieć za serwerem proxy, wtedy proxy ustawia $_SERVER[’HTTP_X_FORWARDED_FOR’], tyle że tę wartość bardzo łatwo podrobić. Może ją ustawić ktoś, kto w ogóle nie korzysta z proxy, albo może się w niej znaleźć wewnętrzny adres LAN sprzed proxy.
Dlatego jeśli zapisujesz $_SERVER[’HTTP_X_FORWARDED_FOR’], zapisuj obok również $_SERVER[’REMOTE_ADDR’], na przykład w dwóch osobnych kolumnach bazy danych.
A jeśli trzymasz adres IP w bazie jako ciąg znaków, zarezerwuj co najmniej 45 znaków. IPv6 zostaje z nami na dobre, a te adresy są dłuższe niż dawne IPv4.
Zastanów się dwa razy, zanim zapiszesz adres IP w bazie danych: twoja aplikacja musi pozostać zgodna z RODO.
wyrażenie regularne adres ip php
/**
* Walidacja adresu IP wyrażeniem regularnym
*
* Jeśli adres IP jest nieprawidłowy, zwraca false, w przeciwnym razie IPv4 albo IPv6
*
* @param $ip
* @return Boolean
*/
function validateIP($ip){
if(isIPv4($ip)) {
return 'IPv4';
} elseif (isIPv6($ip)) {
return 'IPv6';
}
return false;
}
/*
* Walidacja IPv4
* @param $ip
*/
function isIPv4($ip)
{
return preg_match('/^(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/i', $ip);
}
/*
* Walidacja IPv6
* @param $ip
*/
function isIPv6($ip)
{
return preg_match('/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/i', $ip);
}if ($ip = validateIP($_SERVER['REMOTE_ADDR']) {
echo "Mon IP est une " . $ip;
// Moje IP to IPv4
} else {
echo "IP Invalide !";
}Wersja HTML
Pole formularza możesz sprawdzić także po stronie znaczników, atrybutem pattern elementu <input>. Pamiętaj tylko, że służy to wyłącznie do pokazania użytkownikowi, że coś wpisał źle, na przykład czerwoną ramką. Na takiej walidacji nie wolno polegać.
wyrażenie regularne adres ip html
<input
name="ip"
type="text"
pattern="(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}"
placeholder="#.#.#.#"
/>
See the Pen
Untitled by Damien Flandrin (@dam62500)
on CodePen.0


