7

以下の例のように、phpを使用して文字列がIPまたはドメインであるかどうかを検出する方法はありますか?

$string = "http://192.168.0.0";
$string = "http://example.com";

したがって、文字列がIPの場合、スクリプト/関数はそれをドメインとして検出すると何かを実行します。

ありがとうございました

4

4 に答える 4

12

次のように簡単にテストできます。

$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']);
于 2012-10-20T09:41:07.923 に答える
2

HTTP_HOSTとSERVER_ADDRを比較することもできます。IP v6の場合、HTTP_HOSTの角かっこも削除する必要があります。

$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]'));

正規表現よりも効率的であるように見えますが、ip2longアプローチがより効率的かどうかはわかりません。

于 2017-05-05T12:01:51.740 に答える
1

正規表現を使用できます。

ここに例があります:

DNSホスト名またはIPアドレスに一致する正規表現?

コード/正規表現パターン:

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で正規表現を使用する方法:

php.netのpreg-matchマニュアル

于 2012-10-20T09:45:51.617 に答える
0

そのSOの質問に正規表現があります:DNSホスト名またはIPアドレスに一致する正規表現?

そして、PHP関数を使用する必要があります:preg_match

于 2012-10-20T09:43:08.517 に答える