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 as0or"".
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