-1

これは機能します:

    if (strpos($page, 'http') == 0) {
    $link = 'Test';
}

しかし、これはしません:

    if (strpos($page, 'http' || 'www' || '/') == 0) {
    $link = 'Test';
}

$page が http、www、または / のいずれでも始まらない場合は、何かを返す必要があります。

4

4 に答える 4

2

上記の「悪い議論」の回答以外に、重大な論理バグもあります。strpos'needle' 文字列が '干し草の山' に見つからない場合、ブール値の FALSE を返すことができます。例えば

$needle = 'foo';
$haystack = 'bar';
if (strpos($haystack, $needle) == 0) {
   echo 'found it!';
}

strposfound it!は boolean FALSE を返し、それを PHP が int に型キャストして 0 と比較したため、 に(int)FALSEなり0ます。

厳密な比較演算子===を使用して、実際に int と int を比較していることを確認する必要があります。

if (strpos(...) === 0) { ... }
于 2013-09-13T20:05:02.213 に答える
1

残念ながら、PHP は「ドアが赤か緑か青か」を理解していません。「ドアが赤、ドアが緑、またはドアが青の場合」にスプーンで餌を与える必要があります。しかし、あなたがとることができるいくつかのショートカットがまだあります:

if( preg_match("(^(?:http|www|/))",$page)) $link = "Test";
于 2013-09-13T19:48:56.990 に答える
0

パターン マッチングを行う必要がある場合は、このような場合に正規表現を使用することをお勧めします。要点をつかむと、あらゆる面でより効率的になり、より簡単になります。これは非常に役立つガイドです: http://oreilly.com/catalog/regex/chapter/ch04.html

于 2013-09-13T19:52:16.300 に答える