sidewalkcafe blog

日々是好日

正規表現によるIPアドレスのチェック

PHPの練習問題

IPアドレスのチェックでぐぐったら出て来る正規表現が間違ってた件

間違いの例

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

解説

正規表現内で使われる「.」(ドット)は、「全ての文字」という意味になるので、
「.」を正しくチェックするには「\.」と入力しなければならない。
間違った上の例では「1234567890」も正規のIPアドレスと判断してしまう

PHPIPアドレスチェック

<?php
//チェックしたいアドレス
$IP = "123.45.67.89";

if(preg_match('/^(([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])$/', $IP)){
  echo("正しいIPアドレスです。");
}else{
  echo("IPアドレスじゃありません。");
}
?>