开发者

verify, if the string starts with given substring

开发者 https://www.devze.com 2023-01-07 01:40 出处:网络
I have a string in $str variable. How can I verify if it starts with some word? Example: $str = "http://somesite.com/somefolder/somefile.php";

I have a string in $str variable.

How can I verify if it starts with some word?


Example:

$str = "http://somesite.com/somefolder/somefile.php";

When I wrote the following script returns yes

if(strpos($str, "http://") == '0') echo "yes";

BUT it returns yes even when I wrote

if(strpos($str, "other word here") == '0') echo "yes";

I think strpos returns zero if it can't find substring too (or a value that eva开发者_高级运维luates to zero).

So, what can I do if I want to verify if word is in the start of string? Maybe I must use === in this case?


You need to do:

if (strpos($str, "http://") === 0) echo "yes"

The === operator is a strict comparison that doesn't coerce types. If you use == then false, an empty string, null, 0, an empty array and a few other things will be equivalent.

See Type Juggling.


You should check with the identity operator (===), see the documentation.

Your test becomes:

if (strpos($str, 'http://') === 0) echo 'yes';

As @Samuel Gfeller pointed out: As of PHP8 you can use the str_starts_with() method. You can use it like this:

if (str_starts_with($str, 'http://')) echo 'yes';


PHP does have 2 functions to verify if a string starts with a given substring:

  • strncmp (case sensitive);
  • strncasecmp (case insensitive);

So if you want to test only http (and not https), you can use:

 if (strncasecmp($str,'http://',7) == 0) echo "we have a winner"


check with

if(strpos($str, "http://") === 0) echo "yes";

as == will turn positive for both false & 0 check the documentation


Another option is:

if (preg_match("|^(https?:)?\/\/|i", $str)) {
    echo "the url starts with http or https upper or lower case or just //.";
}

As shown here: http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/


strncmp($str, $word, strlen($word))===0

Is a bit more performant than strpos


Starting with PHP 8 (2020-11-24), you can use str_starts_with:

if (str_starts_with($str, 'http://')) {
   echo 'yes';
}


PHP 8 has now a dedicated function str_starts_with for this.

if (str_starts_with($str, 'http://')) {
   echo 'yes';
}


if(substr($str, 0, 7)=="http://") {
    echo("Statrs with http://");
}


There's a big red warning in the documentation about this:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

strpos may return 0 or false. 0 is equal to false (0 == false). It is not identical to false however, which you can test with 0 === false. So the correct test is if (strpos(...) === 0).

Be sure to read up on the difference, it's important: http://php.net/manual/en/language.operators.comparison.php

0

精彩评论

暂无评论...
验证码 换一张
取 消