2

現在、選択した IP アドレスが文字列内にあるかどうかを調べて、それらをprivateという単語に置き換えるソリューションを探しています。私の問題は、常に同じ IP ではなく範囲を置き換えたいということです。

たとえば、文字列に 123 で始まる IP が含まれているかどうかを調べたいとします。含まれている場合は、IP アドレスをプライベートという単語に変更します。

例:

123.55.33.10
123.100.10.110
123.1.5.1

問題は、正確な IP アドレスがわからず、それらがどのように始まるかを知っているだけなので、文字列の長さなどをチェックしてそれらを検閲できないことです.

次の問題は、さまざまな ip を置き換えたいということです。たとえば、123 で始まるもの、次に 66 で始まるものなどです。したがって、私の問題については、基本的に次のように機能する解決策を考え出すのを手伝っていただければ幸いです。

$ips = array("123.","66.","112."); 

解決策は基本的に、文字列に配列値の1つが含まれているかどうかを確認し、IPをprivateという単語に置き換えますが、123だけでなく、全体として考えられる任意の組み合わせを意味します$string = str_replace("123.","",$string);

ただし、IPアドレス全体をプライベートに置き換えます

このリクエストの理由: 私は学校用の小さなスクリプトを作成しています。検索機能が結果に IP アドレスを返し、それらを結果に表示したくないため、IP をprivateという単語に置き換える必要があります。

文字列は次のようになります。Hans が IP 123.1.1.1 で 10.12.2012 に投稿

の使命は次のとおりです。

つまり、文字列が 10.12.2012 に IP 123.112.12.1 で投稿された Hans か、10.12.2012 に IP 123.12.15.12 で投稿された Hans か、10.12.2012 に IP 123.24.0.100 で投稿された Hans であるかに関係なく、要約します。

ソリューションは、配列の値で始まるすべての IP をプライベートという単語に置き換えます

これを読んでくれてありがとう:)

編集:

この文字列で解決策を試しましたが、期待どおりに機能しませんでした:

<?php
$ip = "The date is 12.10.2012 and this ip 123.1.2.12 should not show but 144.100.1.11 should show while 66.122.11.9 should not show";
$ip = preg_replace('/^(123 | 66 | 112) \. [\d.]+$/x', "private", $ip);
echo $ip;
?>

最終的に表示されるものは次のとおりです。

日付は 12.10.2012 で、この ip privateは表示されませんが、144.100.1.11 は表示されますが、private は表示されません。

4

3 に答える 3

0

そのために正規表現を使用することも可能で、もちろんワンライナーになります。

 $ip = preg_replace('/^(123 | 66 | 112) \. [\d.]+$/x', "private", $ip);

正規表現は最初の数字を比較するだけですが、IP 文字列の残りの部分を と照合することもできる[\d.]+ため、大文字と小文字がすべて置き換えられます。

于 2012-10-06T17:24:51.643 に答える
0

explodeと について学びたいと思われるかもしれませんin_array:

$private_ips = ["123", "66", "112"];

in_array(explode('.', $ip)[0], $private_ips) 
    && $ip = 'private'
    ;

echo $ip;
于 2012-10-06T17:20:39.253 に答える