Split IP and port in JavaScript with regular expressions
We recently did some improvements on the elmah.io UI making IPs clickable. We've had automatic detection of IPs for a while but it always bugged me that the regex that we had didn't caught IP addresses with a port number (typically logged by ASP.NET MVC and similar):
127.0.0.1:80
The solution was an improved piece of JavaScript to detect this that I'm sharing in hope of helping others with a similar challenge:
function resolveIP(data) {
if (data) {
if(data.match(/^(?:(?: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]))?$/g)) {
if(data.match(/:/g)) {
var split = data.split(':');
return split[0];
}
return data;
}
}
return null;
}
You can find all sorts of regex matching IP addresses on the web. The regex above also support including a port number as seen in the example above. If the data
value matches the regex, we return the IP part.