サンプル・プログラムの実行例

サンプル・プログラム
checkip.php | サンプル・プログラム本体 |
IPアドレス
IPアドレス(IPv4)の構造は
これを正規表現で表すと、
A.B.C.D (※)A〜Bは0以上255以下の整数である。
これを正規表現で表すと、
/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/となる。なお、この正規表現だけでは「0以上255以下の整数」のチェックができないので、PHPのロジックでチェックすることにする。
今回使った正規表現
- ^
- 文字列の先頭、または行終端文字の直後にマッチする。
- $
- 文字列の末尾、または行終端文字の直前にマッチする。
- [...]
- 文字クラス。
この中に記述された文字の並びのうちの1文字を表す。
- -
- 文字の範囲指定。
a-z はアルファベット小文字すべてに、0-9は数字すべてにマッチする。
- -
- 文字の範囲指定。
a-z はアルファベット小文字すべてに、0-9は数字すべてにマッチする。
- {a,b}
- 直前のパターンの a 回以上、b 回以下の繰り返し。
ここでは、文字クラス [0-9] に記述される数字が 1 桁以上 3 桁以下であることを示す。
- (...)
- サブパターン。
マッチングだけであれば不要だが、置換を行うために、マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
- [^....]
- 文字クラス内の否定。
文字クラス内“以外の”文字にマッチする。
- (...)
- サブパターン。
マッチングだけであれば不要だが、4つの整数部分を取り出して定義域チェック(0 以上 255 以下)を行うために、マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
サンプル・プログラムの解説
126: /**
127: * IPアドレスかどうか検査する
128: * @param string $str チェックするテキスト
129: * @return string IPアドレス/FALSE(IPアドレスではない)
130: */
131: function is_ipadr($str) {
132: $pat = '/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/';
133: //IPアドレスを表す正規表現
134: preg_match($pat, $str, $regs);
135:
136: //定義域チェック (0 ≦ IP ≦ 255)
137: for ($i = 1; $i <= 4; $i++) {
138: if (!isset($regs[$i])) return FALSE;
139: if ($regs[$i] < 0 || $regs[$i] > 255) return FALSE;
140: }
141:
142: return $regs[0];
143: }
与えられた文字列が IP アドレスかどうかを検査する処理は、ユーザー関数 is_ipadr として用意した。

ユーザー関数 is_ipadr では、まず、与えられた文字列が前述の正規表現のマッチするかどうか調べる。
続いて、4 つある整数部分が 0 以上 255 以下になっているかどうかを if 文を使って検査する。

メインプログラムとHTML表示処理については、「正規表現でURLをリンクに変換する」とほぼ同じである。

ユーザー関数 is_ipadr では、まず、与えられた文字列が前述の正規表現のマッチするかどうか調べる。
続いて、4 つある整数部分が 0 以上 255 以下になっているかどうかを if 文を使って検査する。

メインプログラムとHTML表示処理については、「正規表現でURLをリンクに変換する」とほぼ同じである。
(この項おわり)
(2021年8月28日)PHP8対応,大幅改訂