这有效:
if (strpos($page, 'http') == 0) {
$link = 'Test';
}
但这不会:
if (strpos($page, 'http' || 'www' || '/') == 0) {
$link = 'Test';
}
如果 $page 不以这三个中的任何一个开头,我需要返回一些内容:http、www 或 /。
这有效:
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
如果在 'haystack' 中找不到 'needle' 字符串,则可以并且将返回布尔值 FALSE。例如
$needle = 'foo';
$haystack = 'bar';
if (strpos($haystack, $needle) == 0) {
echo 'found it!';
}
会说,因为 strpos 返回布尔值found it!
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