检查字符串是否以 http 或 www 或 / 开头


Check if string starts with http or www or /

这有效:

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

但这不会:

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

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

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

你不能像那样使用||。

除了上面的"糟糕的论点"答案之外,你还有一个严重的逻辑错误。 如果在"大海捞针"中找不到"针"字符串,strpos可以并且将返回布尔值 FALSE。例如

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

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

您需要使用严格的比较运算符===来确保您确实比较 int 到 int,而不是 int 与可能的布尔假:

if (strpos(...) === 0) { ... }
不幸的是,

PHP不理解"如果门是红色,绿色或蓝色"。你必须用勺子喂它"如果门是红色的或门是绿色的或门是蓝色的"。但是您仍然可以采取一些捷径:

if( preg_match("(^(?:http|www|/))",$page)) $link = "Test";

当您需要进行模式匹配时,我建议对这种情况使用正则表达式。一旦你掌握了它的要点,在各个方面都更有效率。这是一个非常有用的指南:http://oreilly.com/catalog/regex/chapter/ch04.html