正規表現でIPアドレスを検証する方法

正規表現を使用して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.example.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が必要です。 「a.a.a.a」–数字のみが
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.example.regex;

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

/**
 * IPAddress validator Testing
 * @author example
 *
 */
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.example.regex.IPAddressValidatorTest
    Tests run: 2, Failures: 0, Skips: 0
===============================================

===============================================
example
Total tests run: 2, Failures: 0, Skips: 0
===============================================