if(strpos("http://www.example.com","http://www.")==0){ // do work}
我希望这可以解决它的真实性。但是当我做什么时会发生什么呢?
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
这也传递了php 5,因为据我所知,strpos返回false,转换为0。
这是正确的思考/行为吗?如果是这样,那么测试子字符串的解决方法是在另一个字符串的开头?
答案 0 :(得分:48)
是的,这是正确/预期的行为:
strpos
可以在字符串开头匹配时返回0
false
问题是你不应该使用==
来比较0
和false
;您应该使用===
,如下所示:
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
或者:
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
有关更多信息,请参阅Comparison Operators:
$a == $b
等于TRUE
,则$a
为$b
。$a === $b
等于TRUE
,$a
将为$b
,属于同一类型。此函数可能返回布尔值
FALSE
,但也可能会返回 非布尔值,其值为FALSE
,例如0
或""
。
请 阅读Booleans上的部分 更多信息。
使用the===
operator来测试回报 这个功能的价值。
答案 1 :(得分:10)
===
和!==
比较类型和值:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}
答案 2 :(得分:5)
strpos返回int或boolean false。 ==运算符也计算0表示false,你想使用===运算符(三个等号),它还检查被比较的类型是否相同,而不仅仅是看它们是否可以被评估为相同。
所以
if (strpos($hastack, $needle) === 0)
{
// the $needle is found at position 0 in the $haystack
}
答案 3 :(得分:1)
0
是strpos
在最开始找到匹配项时可能返回的值。如果未找到匹配,则返回false
(布尔值)。因此,您需要使用strpos
运算符检查===
的返回值,该运算符检查值和类型,而不是使用仅检查值的==
。
答案 4 :(得分:-1)
我个人倾向于这样使用:
if(!strpos($v,'ttp:'))$v='http://'.$v;
或
if(strpos(' '.$v,'http'))
要避免“0
”位置,请始终将其设为超过0
的数字
欢呼声