
Het fragment hieronder is een reguliere expressie die IP-adressen valideert. Hij werkt in JavaScript net zo goed als in PHP of in HTML, en er horen een paar handige functies bij die ermee controleren of een IP-adres een geldig formaat heeft.
Reguliere expressie voor 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}Reguliere expressie voor 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]))JavaScript-versie
Het formaat hangt af van de versie: een IPv4-adres ziet er zo uit: 0.0.0.0.
Een IPv6-adres zo: 2001:0db8:3c4d:0015:0000:d234::3eee:0000
De functie krijgt een IP-adres als string binnen en vergelijkt dat met de reguliere expressie. Klopt het formaat niet, dan geeft ze false terug, klopt het wel, dan geeft ze true terug.
regex ip-adres javascript
/**
* Een IP valideren met een reguliere expressie
*
* Als het IP ongeldig is, geef false terug, anders IPv4 of IPv6
*
* @param ip
* @return Boolean
*/
function validateIP(ip){
if(isIPv4(ip)) {
return 'IPv4';
} elseif (isIPv6(ip)) {
return 'IPv6';
}
return false;
}
/**
* Een IPv4 valideren met een reguliere expressie
*
* Als het IP ongeldig is, geef false terug
*
* @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);
}
/**
* Een IPv6 valideren met een reguliere expressie
*
* Als het IP ongeldig is, geef false terug
*
* @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);
}De regex in JavaScript gebruiken
De eenvoudigste manier om deze reguliere expressie in te zetten is in een IF-voorwaarde, zoals hieronder.
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
PHP-versie
Om in PHP aan een IP-adres te komen, vertrouw je op$_SERVER[‘REMOTE_ADDR’] , dat het echte adres van de verbindende partij bevat. Betrouwbaarder wordt het niet.
Die partij kan echter achter een proxy zitten. Dan heeft de proxy mogelijk $_SERVER[‘HTTP_X_FORWARDED_FOR’] gezet, een waarde die zich makkelijk laat vervalsen. Ze kan net zo goed van iemand zonder proxy komen, of het adres erin is een intern LAN-adres achter de proxy.
Log je $_SERVER[‘HTTP_X_FORWARDED_FOR’], log dan dus ook $_SERVER[‘REMOTE_ADDR’], bijvoorbeeld in twee aparte kolommen van je database.
En sla je een IP-adres als string op, reserveer dan minstens 45 tekens. IPv6 gaat niet meer weg, en die adressen zijn langer dan de oude IPv4-adressen.
Bedenk goed wat je doet als je een IP-adres in een database opslaat: je applicatie moet daarbij AVG-conform blijven.
regex ip-adres php
/**
* Een IP valideren met een reguliere expressie
*
* Als het IP ongeldig is, geef false terug, anders IPv4 of IPv6
*
* @param $ip
* @return Boolean
*/
function validateIP($ip){
if(isIPv4($ip)) {
return 'IPv4';
} elseif (isIPv6($ip)) {
return 'IPv6';
}
return false;
}
/*
* Valideert 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);
}
/*
* Valideert 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;
// Mijn IP is een IPv4
} else {
echo "IP Invalide !";
}HTML-versie
Je kunt een veld ook direct in de markup laten controleren, via het attribuut pattern van <input>. Let op: daarmee maak je de bezoeker alleen zichtbaar dat er iets niet klopt, bijvoorbeeld met een rode rand. Als validatie telt het niet.
regex ip-adres 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


