それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpで 文字列がIPアドレスかどうか調べる- filter_vars

文字列がIPアドレスかどうか調べるには。

FILTER_VALIDATE_IP を filter_vars と組み合わせて使うとお手軽です。

<?php
function is_ipv4 ( $ip ){
  return filter_var($ip,  FILTER_VALIDATE_IP);
}

これで、v4かどうか調べることができる。

使い方と出力サンプルは次の通り

いくつかのタイプで調べてみると、動作がわかる。

php > var_dump(filter_var('a', FILTER_VALIDATE_IP));
bool(false)
php > var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP));
string(9) "127.0.0.1"
php > var_dump(filter_var('127.', FILTER_VALIDATE_IP));
bool(false)
php > var_dump(filter_var('1.1.1.1', FILTER_VALIDATE_IP));
string(7) "1.1.1.1"
php > var_dump(filter_var('192.168.1.1/24', FILTER_VALIDATE_IP));
bool(false)
php > var_dump(filter_var('192.168.1.1', FILTER_VALIDATE_IP));
string(11) "192.168.1.1"
php >

FILTER_VALIDATE_IP と filter_var の組み合わせでバリデーションが出来て、ちゃんと動作しているのがわかるでしょうか。

v6 かどうか調べるには

FILTER_FLAG_IPV6  を使います。ただし、組み合わせて使います。

<?php
php > var_dump(filter_var('2001:a240:8383:a300::1', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ));
string(22) "2001:a240:8383:a300::1"

マニュアル読もうぜ。

なぜphper は自作のヴァリでーションを書いてしまうのか。正規表現パターンをいいけど言語組み込みの機能は積極的に使ってほしいと思うんですよね。

https://www.php.net/manual/en/ref.filter.php