这有效:
if (strpos($page, 'http') == 0) {
$link = 'Test';
}
但这不是:
if (strpos($page, 'http' || 'www' || '/') == 0) {
$link = 'Test';
}
如果$ page不以这三个中的任何一个开头,我需要返回一些内容:http,www或/.
答案 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