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

时间:2013-09-13 19:41:49

标签: php conditional strpos

这有效:

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

但这不是:

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

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

4 个答案:

答案 0 :(得分:2)

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

你不能使用||那样的。

答案 1 :(得分:2)

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

$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) { ... }

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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