这有效:
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