# How to validate IP address with regular expression

IP Address Regular Expression Pattern

``````
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\$
``````

Description

``````
^		#start of the line
(		#  start of group #1
[01]?\\d\\d? #    Can be one or two digits. If three digits appear, it must start either 0 or 1
#    e.g ([0-9], [0-9][0-9],[0-1][0-9][0-9])
|		#    ...or
2[0-4]\\d	#    start with 2, follow by 0-4 and end with any digit (2[0-4][0-9])
|           #    ...or
25[0-5]      #    start with 2, follow by 5 and ends with 0-5 (25[0-5])
)		#  end of group #2
\.            #  follow by a dot "."
....            # repeat with 3 times (3x)
\$		#end of the line
``````

Whole combination means, digit from 0 to 255 and follow by a dot “.”, repeat 4 time and ending with no dot “.” Valid IP address format is “0-255.0-255.0-255.0-255”.

## 1. Java Regular Expression Example

IPAddressValidator.java
``````
package com.mkyong.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IPAddressValidator{

private Pattern pattern;
private Matcher matcher;

private static final String IPADDRESS_PATTERN =
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\$";

public IPAddressValidator(){
pattern = Pattern.compile(IPADDRESS_PATTERN);
}

/**
* Validate ip address with regular expression
* @param ip ip address for validation
* @return true valid ip address, false invalid ip address
*/
public boolean validate(final String ip){
matcher = pattern.matcher(ip);
return matcher.matches();
}
}
``````

## 2. IP address that matches :

1. “1.1.1.1”, “255.255.255.255”,”192.168.1.1″ ,
2. “10.10.1.1”, “132.254.111.10”, “26.10.2.10”,
3. “127.0.0.1”

## 3. IP address that doesnâ€™t match :

1. “10.10.10” – must have 4 “.”
2. “10.10” – must have 4 “.”
3. “10” – must have 4 “.”
4. “a.a.a.a” – only digit has allowed
5. “10.0.0.a” – only digit has allowed
6. “10.10.10.256” – digit must between [0-255]
7. “222.222.2.999” – digit must between [0-255]
8. “999.10.10.20” – digit must between [0-255]
9. “2222.22.22.22” – digit must between [0-255]
10. “22.2222.22.2” – digit must between [0-255]

## 4. Unit Test

IPAddressValidatorTest.java
``````
package com.mkyong.regex;

import org.testng.Assert;
import org.testng.annotations.*;

/**
* IPAddress validator Testing
* @author mkyong
*
*/
public class IPAddressValidatorTest {

private IPAddressValidator ipAddressValidator;

@BeforeClass
public void initData(){
ipAddressValidator = new IPAddressValidator();
}

@DataProvider
public Object[][] ValidIPAddressProvider() {
return new Object[][]{
new Object[] {"1.1.1.1"},new Object[] {"255.255.255.255"},
new Object[] {"192.168.1.1"},new Object[] {"10.10.1.1"},
new Object[] {"132.254.111.10"},new Object[] {"26.10.2.10"},
new Object[] {"127.0.0.1"}
};
}

@DataProvider
public Object[][] InvalidIPAddressProvider() {
return new Object[][]{
new Object[] {"10.10.10"},new Object[] {"10.10"},
new Object[] {"10"},new Object[] {"a.a.a.a"},
new Object[] {"10.0.0.a"},new Object[] {"10.10.10.256"},
new Object[] {"222.222.2.999"},new Object[] {"999.10.10.20"},
new Object[] {"2222.22.22.22"},new Object[] {"22.2222.22.2"},
new Object[] {"10.10.10"},new Object[] {"10.10.10"},
};
}

@Test(dataProvider = "ValidIPAddressProvider")
public void ValidIPAddressTest(String ip) {
boolean valid = ipAddressValidator.validate(ip);
System.out.println("IPAddress is valid : " + ip + " , " + valid);
Assert.assertEquals(true, valid);
}

@Test(dataProvider = "InvalidIPAddressProvider",
dependsOnMethods="ValidIPAddressTest")
public void InValidIPAddressTest(String ip) {
boolean valid = ipAddressValidator.validate(ip);
System.out.println("IPAddress is valid : " + ip + " , " + valid);
Assert.assertEquals(false, valid);
}
}
``````

## 5. Unit Test – Result

``````
IPAddress is valid : 1.1.1.1 , true
IPAddress is valid : 255.255.255.255 , true
IPAddress is valid : 192.168.1.1 , true
IPAddress is valid : 10.10.1.1 , true
IPAddress is valid : 132.254.111.10 , true
IPAddress is valid : 26.10.2.10 , true
IPAddress is valid : 127.0.0.1 , true
IPAddress is valid : 10.10.10 , false
IPAddress is valid : 10.10 , false
IPAddress is valid : 10 , false
IPAddress is valid : a.a.a.a , false
IPAddress is valid : 10.0.0.a , false
IPAddress is valid : 10.10.10.256 , false
IPAddress is valid : 222.222.2.999 , false
IPAddress is valid : 999.10.10.20 , false
IPAddress is valid : 2222.22.22.22 , false
IPAddress is valid : 22.2222.22.2 , false
PASSED: ValidIPAddressTest([Ljava.lang.String;@1d4c61c)
PASSED: InValidIPAddressTest([Ljava.lang.String;@116471f)

===============================================
com.mkyong.regex.IPAddressValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================

===============================================
mkyong
Total tests run: 2, Failures: 0, Skips: 0
===============================================
``````

## Reference

#### About the Author

##### mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

#### Comments

44 Comment threads
12 Thread replies
0 Followers

Most reacted comment
Hottest comment thread
43 Comment authors
Recent comment authors
Guest
Richard Yang

Obviously, the digital starting with 0, like 09.012.38.128 also matches.

Why not this?

“^([0-9]|[1-9]\d|2[0-4]\d|25[0-5])\.” +
“([0-9]|[1-9]\d|2[0-4]\d|25[0-5])\.” +
“([0-9]|[1-9]\d|2[0-4]\d|25[0-5])\.” +
“([0-9]|[1-9]\d|2[0-4]\d|25[0-5])\$”;

Guest
parth

send me your full source code …

Guest
mbsysde99

Thank you brother for sharing it. How to validate subnet mask? Anybody can help me?

Guest
Neil

private static final String IPV4REGEX = “^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.” +
“([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.” +
“([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.” +
“([01]?\\d\\d?|2[0-4]\\d|25[0-5])(/([0-2]?\\d|3[0-2]))?\$”

Guest
Ludovic Urbain

Here’s the one I wrote for that purpose:
((1?dd?|2[0-4]d|25[0-5]).){3}(1?dd?|2[0-4]d|25[0-5])

Guest
tumba

Hi! Great forum, love the stuff here! I need help with this validator. How can I add to allow string “localhost”, too? Thank you!

Guest
Megha Thirwani

Great document. Have seen so many tutorials online .. your’s is best

Guest
MKYING

YO MKYONG! YOURE THE BEST!

Guest
V?n Ch??ng Nguy?n

This is regex 0-255: “^(([01]?\d{1,2})|(2[0-5]{0,2}))(\.(([01]?\d{1,2})|(2[0-5]{0,2}))){3}\$”;

Guest
Akbar Ali

^(([01]?dd?|2[0-4]d|25[0-5])[.]?){4}\$

Guest
yash

can you please help me with IPv6 validation using regex, please ?? thanks.

Guest
malesh

yes denfitely

Guest
yash

404. link not found. :(

Guest
fetishes

I am really inspired together with your writing abilities as smartly as with the format for your blog.

Is that this a paid topic or did you modify it yourself?
Anyway keep up the nice high quality writing, it is uncommon to peer a nice
weblog like this one these days..

Guest
Arsalan Khan

How to make it fail for 255.255.255.255?

Guest
visit for names golden retriever content

Excellent pieces. Keep posting such kind of information on your
site. Im really impressed by your blog.
Hi there, You have done a great job. I’ll certainly digg it and in my view suggest to my friends.

I’m confident they’ll be benefited from this web site.

Guest
king size memory foam mattress cover

No matter if some one searches for his necessary thing,
so he/she wishes to be available that inn detail, therefore that
thing is maintained over here.

Guest
microsoft points kopen

Quality articles is the crucial to interest the visitors to go
to see the website, that’s what this site is providing.

Guest
irrationalimports.com

After I initially left a comment I appear to have clicked on the -Notify me when new comments are added-
checkbox and now each time a comment is added I recieve four emails
with the exact same comment. Perhaps there is
a way you can remove me from that service? Many thanks!

Guest
Ferdinand

Excellent blog here! Also your site lots up fast! What host
are you the usage of? Can I get your affiliate linnk on your host?
I want my website loaded up as fast as yours lol

Guest
raspberry pi alternative

I seldom leave a response, but i did a few searching and wound up here How to validate IP address with regular expression. And I do have a couple of questions for you if it’s allright. Could it be just me or does it give the impression like a few of these remarks come across as if they are written by brain dead folks? :-P And, if you are writing at other places, I would like to keep up with anything fresh you have to post. Could you make a list of the complete urls of all your shared sites… Read more »

Guest
Arpith

Does not work for 10.106.2142 (2 digits and a 4-digit octet but it is still a valid IP; ping it if you will)

Guest
Abhideep

Does not work for 10.0.0.8 …

Guest
Anil

Thanks for posting this code – is it available for use freely? Appreciate your making it available.

Guest
Anil

Thanks for posting this code – is it available for use freely?

Guest
David Scherfgen

Nice article.
The question arises whether you want to use a very simple regex that will just look for four 3-digit numbers separated by dots and then filter the candidates in your programming language, or whether you want to use the quite complex one that has the “< 256" constraint built into it.
Would be interesting to see a performance comparison …

PS:
I also wrote an article about regex and IP addresses (IPv4 and IPv6).
IPv6 is so much easier to match because it uses hex numbers! :-)
http://regex-for.com/ip-addresses/

How to execute shell command from Java

[…] How To Validate IP Address With Regular Expression Tags : bash java mkyong Founder of Mkyong.com, love Java and open source stuffs. Follow him on Twitter, or befriend him on Facebook or Google Plus. Btw, Mkyong.com is hosted on Liquid Web, a perfect hosting provider, 100% uptime and 24 hours support. […]

Guest
nirmal

Hi,
This program says 10.1.0.0 is a valid ip but this is not valid i believe, please see below link

http://www.comptechdoc.org/independent/networking/guide/netaddressing.html

Guest
Fikri Fadzil

10.1.0.0 is still a valid ip address.

.0 is used for network address.
.255 is used for broadcast address.

between both, all the addresses are used for hosts. whether the ip is valid or not… those are valid ip. Based on the URL you quoted from, 10.1.0.0 is not a valid host address because it is a network address.

Guest
ozgun

IPAddressValidator ipAddressValidator; ipAddressValidator = new IPAddressValidator(); InetAddress address = null; boolean valid = ipAddressValidator.validate(“01.03.01.04”); System.out.println(“IPAddress is valid : ” + ” , ” + valid); try { address = InetAddress.getByName(“01.0.000.05”); } catch (UnknownHostException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. }

Guest
passerby

A string of digits beginning with 0 and including just digits 0-7 in an IPv4 address will be taken as an octal numeral, not a decimal numeral, in many contexts, such as the destination in a ping command. Mkyong’s pattern permits 2-digit & 3-digit strings beginning with 0. If the intention is to require a dotted quad of decimal unsigned integers, then multidigit strings beginning with 0 should not be permitted. Ozgun’s getByName approach is better. I think it will handle hostnames & all numeric-string IPv4 addresses, with 3, 2, 1, or 0 dots (4, 3, 2, or 1 unsigned-integer… Read more »

Guest
ozgun

More easy way:
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
InetAddress address = null;
try {
address = InetAddress.getByName(“444.156.115.59”);
} catch (UnknownHostException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
java.net.UnknownHostException: 444.156.115.59
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)

Guest
Szeak

oh – \\. at the and sorry :)

Guest
Szeak

Your pattern may like more pritty with this mode:

`^([01]?\\d\\d?|2[0-4]\\d|25[0-5])(\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])){3}\\.\$`

My pattern is :

`^(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])(?:\\.(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])){3}\$`
Guest
chidanand

using react js how to implement ip address validation