How to check if a string starts with a specified string?
PhpPhp Problem Overview
I'm trying to check if a string starts with http
. How can I do this check?
$string1 = 'google.com';
$string2 = 'http://www.google.com';
Php Solutions
Solution 1 - Php
PHP 8 or newer:
Use the str_starts_with function:
str_starts_with('http://www.google.com', 'http')
PHP 7 or older:
Use the substr function to return a part of a string.
substr( $string_n, 0, 4 ) === "http"
If you're trying to make sure it's not another protocol. I'd use http://
instead, since https would also match, and other things such as http-protocol.com.
substr( $string_n, 0, 7 ) === "http://"
And in general:
substr($string, 0, strlen($query)) === $query
Solution 2 - Php
Use strpos()
:
if (strpos($string2, 'http') === 0) {
// It starts with 'http'
}
Remember the three equals signs (===
). It will not work properly if you only use two. This is because strpos()
will return false
if the needle cannot be found in the haystack.
Solution 3 - Php
There is also the strncmp()
function and strncasecmp()
function which is perfect for this situation:
if (strncmp($string_n, "http", 4) === 0)
In general:
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)
The advantage over the substr()
approach is that strncmp()
just does what needs to be done, without creating a temporary string.
Solution 4 - Php
You can use a simple regex (updated version from user viriathus as eregi
is deprecated)
if (preg_match('#^http#', $url) === 1) {
// Starts with http (case sensitive).
}
or if you want a case insensitive search
if (preg_match('#^http#i', $url) === 1) {
// Starts with http (case insensitive).
}
Regexes allow to perform more complex tasks
if (preg_match('#^https?://#i', $url) === 1) {
// Starts with http:// or https:// (case insensitive).
}
Performance wise, you don't need to create a new string (unlike with substr) nor parse the whole string if it doesn't start with what you want. You will have a performance penalty though the 1st time you use the regex (you need to create/compile it).
> This extension maintains a global per-thread cache of compiled regular > expressions (up to 4096). http://www.php.net/manual/en/intro.pcre.php
Solution 5 - Php
You can check if your string starts with http or https using the small function below.
function has_prefix($string, $prefix) {
return substr($string, 0, strlen($prefix)) == $prefix;
}
$url = 'http://www.google.com';
echo 'the url ' . (has_prefix($url, 'http://') ? 'does' : 'does not') . ' start with http://';
echo 'the url ' . (has_prefix($url, 'https://') ? 'does' : 'does not') . ' start with https://';