-1

这有效:

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

但这不会:

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

如果 $page 不以这三个中的任何一个开头,我需要返回一些内容:http、www 或 /。

4

4 回答 4

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

你不能使用 || 像那样。

于 2013-09-13T19:46:58.543 回答
2

除了上面的“错误论点”答案之外,您还有一个严重的逻辑错误。strpos如果在 'haystack' 中找不到 'needle' 字符串,则可以并且将返回布尔值 FALSE。例如

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

会说,因为 strpos 返回布尔值found it!FALSE,然后 PHP 将其类型转换为 int 以与 0 进行比较。(int)FALSE0

您需要使用严格的比较运算符===来确保您确实将 int 与 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 回答