Возможно, вы делаете web-приложение для управления хостингом или хотите разработать для своей социальной сети систему бана по IP-адресу, чтобы запрещать доступ к своему ресурсу злостным спамерам. В этих случаях, чтобы не ошибиться при вводе IP-адреса, вам понадобится проверять IP-адрес перед сохранением его в базу данных.

Предлагаю использовать для этой цели валидацию с помощью регулярного выражения, которое рассмотрено ниже.

Unit-тест написан с использованием библиотеки TestNG 5.10. Как запустить тесты TestNG в Eclipse читайте здесь.

Выражение:

^([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])$

Комментарий:

^		          # начало строки
(		          # начало первой группы
[01]?\\d\\d?         #    Может быть одна или две цифры. Если три цифры, то группа должна начинаться с 0 или 1
|		          #    или
2[0-4]\\d	          #    начинается с 2, далее 0-4 и оканчивается любой цифрой (2[0-4][0-9]) 
|                        #    или
25[0-5]                #    начинается с 2, далее 5 и оканчивается на 0-5 (25[0-5]) 
)		          #  конец первой группы
\.                        #  далее "."
....                      # повторить 3 раза
$		          # конец строки

Пример на Java:

package ru.topcode.skillbase.regexp;
 
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);
	}
 
	/**
	 * Валидирует IP-адрес с помощью решулярного выражения
	 * 
	 * @param ip IP-адрес для валидации
	 * @return true если адрес валидный, false если адрес не валидный
	 */
	public boolean validate(final String ip) {
		matcher = pattern.matcher(ip);
		return matcher.matches();
	}
}

Unit Test:

package ru.topcode.skillbase.regexp.test;
 
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
 
import ru.topcode.skillbase.regexp.IPAddressValidator;
 
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("Валидность IP : " + ip + " , " + valid);
		Assert.assertEquals(true, valid);
	}
 
	@Test(dataProvider = "InvalidIPAddressProvider", dependsOnMethods = "ValidIPAddressTest")
	public void InValidIPAddressTest(String ip) {
		boolean valid = ipAddressValidator.validate(ip);
		System.out.println("Валидность IP : " + ip + " , " + valid);
		Assert.assertEquals(false, valid);
	}
}

Результат выполнения теста:

Валидность IP : 1.1.1.1 , true
Валидность IP : 255.255.255.255 , true
Валидность IP : 192.168.1.1 , true
Валидность IP : 10.10.1.1 , true
Валидность IP : 132.254.111.10 , true
Валидность IP : 26.10.2.10 , true
Валидность IP : 127.0.0.1 , true
Валидность IP : 10.10.10 , false
Валидность IP : 10.10 , false
Валидность IP : 10 , false
Валидность IP : a.a.a.a , false
Валидность IP : 10.0.0.a , false
Валидность IP : 10.10.10.256 , false
Валидность IP : 222.222.2.999 , false
Валидность IP : 999.10.10.20 , false
Валидность IP : 2222.22.22.22 , false
Валидность IP : 22.2222.22.2 , false
Валидность IP : 10.10.10 , false
Валидность IP : 10.10.10 , false
PASSED: ValidIPAddressTest("1.1.1.1")
PASSED: ValidIPAddressTest("255.255.255.255")
PASSED: ValidIPAddressTest("192.168.1.1")
PASSED: ValidIPAddressTest("10.10.1.1")
PASSED: ValidIPAddressTest("132.254.111.10")
PASSED: ValidIPAddressTest("26.10.2.10")
PASSED: ValidIPAddressTest("127.0.0.1")
PASSED: InValidIPAddressTest("10.10.10")
PASSED: InValidIPAddressTest("10.10")
PASSED: InValidIPAddressTest("10")
PASSED: InValidIPAddressTest("a.a.a.a")
PASSED: InValidIPAddressTest("10.0.0.a")
PASSED: InValidIPAddressTest("10.10.10.256")
PASSED: InValidIPAddressTest("222.222.2.999")
PASSED: InValidIPAddressTest("999.10.10.20")
PASSED: InValidIPAddressTest("2222.22.22.22")
PASSED: InValidIPAddressTest("22.2222.22.2")
PASSED: InValidIPAddressTest("10.10.10")
PASSED: InValidIPAddressTest("10.10.10")
 
===============================================
    ru.topcode.skillbase.regexp.test.IPAddressValidatorTest
    Tests run: 19, Failures: 0, Skips: 0
===============================================

Для углубленного изучения регулярных выражений в Java рекомендую посетить соответствующий раздел The Java Tutorials и изучить книги из раздела RegExp в библиотеке TopCode.