サイバーエリアリサーチ株式会社

5.2.3 IPアドレスのフォーマットチェック(正規表現)

IPv4アドレスを正規表現で表す

IPアドレスの検索や正しい入力かどうかのチェックなど、ドット表記されたIPv4アドレスを正規表現で表したいというシーンで使える正規表現を紹介します。

IPv4アドレスは
《0~255の数字》.《0~255の数字》.《0~255の数字》.《0~255の数字》
という4つのオクテットから構成されています。

まず、0~255の数字にマッチする正規表現を考えます。
0~9 または
10~99 または
100~199 または
200~249 または
250~255 として、

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

上記のように表現できます。
同じものが反復する部分を整理して

[1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]

このようにまとめると少しすっきりします。
《0~255の数字》.はこの後ろに.(ドット)を付けるだけなので

([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).

これが3回繰り返されます。最後のオクテットのみドットがつきません。

(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}
([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

上記のようにまとめ、最後に行頭と行末を指定します。

/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}
([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/

これで、ドットアドレス表記されたIPv4アドレスに一致する正規表現が完成しました。

上記で紹介した正規表現のパターンは、次のページで紹介されているものを参考にさせて頂きました。
・「かなり使えるPHPの正規表現まとめ」- IDEA*IDEA
http://www.ideaxidea.com/archives/2009/03/practical_php_regexs.html

ページの先頭へ