文字列が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 は自作のヴァリでーションを書いてしまうのか。正規表現パターンをいいけど言語組み込みの機能は積極的に使ってほしいと思うんですよね。