如何使用正则表达式验证IP地址

IP地址正则表达式模式

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

描述

^		#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

整个组合表示从0到255的数字,后跟点“。”,重复4次并以点“。”结尾。 有效的IP地址格式为“ 0-255.0-255.0-255.0-255”。

1. Java正则表达式示例

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地址:

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地址不匹配:

1.“ 10.10.10” –必须为4“。”
2.“ 10.10” –必须为4“。”
3.“ 10” –必须为4“。”
4.“ aaaa” –仅允许数字
5.“ 10.0.0.a” –仅允许数字
6.“ 10.10.10.256” –数字必须介于[0-255]之间
7.“ 222.222.2.999” –数字必须介于[0-255]之间
8.“ 999.10.10.20” –数字必须介于[0-255]之间
9.“ 2222.22.22.22” –数字必须介于[0-255]之间
10.“ 22.2222.22.2” –数字必须介于[0-255]之间

4.单元测试

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.单元测试–结果

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 ===============================================

参考

  1. http://en.wikipedia.org/wiki/IP_address

翻译自: https://mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/