PHP 正規表現でIPアドレス形式の文字列か判定

2016/04/08

正規表現でIPアドレスの入力チェック

概要

フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。
基本的にはPHPの正規表現を使用しますが、細かいオクテットなどのチェックは独自にプログラミングします。

今回は、オクテットが0~255の数値であるかをチェックした後、ネットワークアドレス、ブロードキャストアドレス、ループバックアドレスの場合はエラーとします。

参考コード


/**
 * IPアドレス形式の文字列の場合trueを返す
 *
 * @param string @ip IPアドレス
 * @return void
 */
function valid_ip( $ip ) {
	// 3桁以内数値がドット区切りで4つあるかチェック
	if ( ! preg_match( "/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip ) ) {
		return false;
	}

	// 各オクテットのチェック
	if ( ! valid_ip_octet( $ip ) ) {
		return false;
	}

	// ネットワークアドレスの場合(ホスト部のビットが全て0)
	if ( substr( $ip, -4 ) == '.0.0' ) {
		return false;
	}

	// ブロードキャストアドレスの場合(ホスト部のビットが全て1)
	if ( substr( $ip, -8 ) == '.255.255' ) {
		return false;
	}

	// ループバックアドレスの場合(127.0.0.1)
	if ( $ip == '127.0.0.1' ) {
		return false;
	}

	return true;
}

/**
 * 各オクテットが 0~255 である場合はtrue、そうでない場合はfalseを返す
 *
 * @param string @ip IPアドレス
 * @return void
 */
function valid_ip_octet( $ip ) {
	$octets = explode( '.', $ip );

	foreach( $octets as $octet ) {
		if ( ctype_digit($octet) === false || $octet < 0 || $octet > 255 ) {
			return false;
		}
	}

	return true;
}

上記関数を使用する場合は次のようになります。


$ipaddress = 'xxx.xxx.xxx.xxx';

if (valid_ip($ipaddress)) {
	echo 'IPアドレスかもしれません。';
} else {
	echo 'IPアドレスではありません。';
}
  • このエントリーをはてなブックマークに追加
Related

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

rbenv環境でRuby on Railsのアプリケーションを一瞬で自動生成

アプリケーション構築時に最初に行う手順 概要 アプリケーションを作成するまでの手順を記載しています。 rbenvなどの環境が設定済と仮定して話を進めま...

Rails devise・authority・rolifyで権限付きの認証機能

devise・authority・rolify 概要 3つのGemを使用して、権限付き認証機能を実装します。 gem インストール Gemfile ...

Rails devise で複数モデルの認証機能を実装

Rails devise で複数モデルを管理 概要 rails のログイン認証 Gem「devise」のインストール・設定方法を紹介します。 よく「d...

jQuery UI ドラッグ&ドロップで並び替え sortableの使用方法

sortable 概要 jQuery UIを使用して、ドラッグ&ドロップで並び替えを行います。 sortableを使用することで、一瞬で実装できちゃいます...

jQuery UIでドラッグ&ドロップ draggableとdroppableの使用方法

draggableとdroppable 概要 jQuery UIを使用して、ドラッグ&ドロップを行います。 要素の移動やコピーをGUI操作で行うときなどに...
トップへ戻る