以下の例のように、phpを使用して文字列がIPまたはドメインであるかどうかを検出する方法はありますか?
$string = "http://192.168.0.0";
$string = "http://example.com";
したがって、文字列がIPの場合、スクリプト/関数はそれをドメインとして検出すると何かを実行します。
ありがとうございました
以下の例のように、phpを使用して文字列がIPまたはドメインであるかどうかを検出する方法はありますか?
$string = "http://192.168.0.0";
$string = "http://example.com";
したがって、文字列がIPの場合、スクリプト/関数はそれをドメインとして検出すると何かを実行します。
ありがとうございました
次のように簡単にテストできます。
$isIP = (bool)ip2long($_SERVER['HTTP_HOST']);
ip2longが返す関数false
は、ホストがドメイン名のような有効なIPアドレスではないことです。関数を使用する利点は、ip2long
提供されたIPアドレスも検証することです。したがって、たとえばアドレスが4.4.4.756の場合、falseが返されます。
したがって、特定の文字列をテストするには、次のようにします。
$string = "http://192.168.0.0";
$parts = parse_url($string);
$isIP = (bool)ip2long($parts['host']);
HTTP_HOSTとSERVER_ADDRを比較することもできます。IP v6の場合、HTTP_HOSTの角かっこも削除する必要があります。
$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]'));
正規表現よりも効率的であるように見えますが、ip2longアプローチがより効率的かどうかはわかりません。
正規表現を使用できます。
ここに例があります:
コード/正規表現パターン:
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
PHPで正規表現を使用する方法:
そのSOの質問に正規表現があります:DNSホスト名またはIPアドレスに一致する正規表現?
そして、PHP関数を使用する必要があります:preg_match