if(strpos("http://www.example.com","http://www.")==0){ // do work}
I'd expect this to resolve as true, which it does. But what happens when I do
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
This also passes on php 5 because as far as I can work out the strpos returns false which translates as 0.
Is this correct thinking/behaviour? If so what is the workaround for testing for that a substring is at the beginning of another string?
strpos in PHP is a built-in function. Its use is to find the first occurrence of a substring in a string or a string inside another string. The function returns an integer value which is the index of the first occurrence of the string.
Return Value: Returns the position of the first occurrence of a string inside another string, or FALSE if the string is not found.
Yes, this is correct / expected behavior :
strpos
can return 0
when there is a match at the beginning of the stringfalse
when there is no matchThe thing is you should not use ==
to compare 0
and false
; you should use ===
, like this :
if(strpos("abcdefghijklmnop","http://www.") === 0) { }
Or :
if(strpos("abcdefghijklmnop","http://www.") === false) { }
For more informations, see Comparison Operators :
$a == $b
will be TRUE
if $a
is equal to $b
.$a === $b
will be TRUE
if $a
is equal to $b
, and they are of the same type.And, quoting the manual page of strpos
:
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
, such as0
or""
.
Please read the section on Booleans for more information.
Use the===
operator for testing the return value of this function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With