J'essaie de vérifier si une chaîne commence par http
. Comment puis-je faire cette vérification?
$string1 = 'google.com';
$string2 = 'http://www.google.com';
Utilisez la fonction substr pour renvoyer une partie d'une chaîne.
substr( $string_n, 0, 4 ) === "http"
Si vous essayez de vous assurer que ce n'est pas un autre protocole. J'utiliserais plutôt http://
, puisque https correspondrait également et d'autres éléments tels que http-protocol.com.
substr( $string_n, 0, 7 ) === "http://"
Et en général:
substr($string, 0, strlen($query)) === $query
Utilisez strpos()
:
if (strpos($string2, 'http') === 0) {
// It starts with 'http'
}
Rappelez-vous les trois signes égaux (===
). Cela ne fonctionnera pas correctement si vous n'en utilisez que deux. Ceci est dû au fait que strpos()
retournera false
si l'aiguille est introuvable dans la botte de foin.
Il y a aussi la fonction strncmp()
et strncasecmp()
qui est parfaite pour cette situation:
if (strncmp($string_n, "http", 4) === 0)
En général:
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)
L'avantage par rapport à l'approche substr()
est que strncmp()
fait simplement ce qu'il faut faire, sans créer de chaîne temporaire.
Vous pouvez utiliser une expression régulière simple (la version mise à jour de l'utilisateur viriathus , car eregi
est obsolète)
if (preg_match('#^http#', $url) === 1) {
// Starts with http (case sensitive).
}
ou si vous voulez une recherche insensible à la casse
if (preg_match('#^http#i', $url) === 1) {
// Starts with http (case insensitive).
}
Les expressions rationnelles permettent d'effectuer des tâches plus complexes
if (preg_match('#^https?://#i', $url) === 1) {
// Starts with http:// or https:// (case insensitive).
}
En termes de performances, vous n'avez pas besoin de créer une nouvelle chaîne (contrairement à substr) ni d'analyser toute la chaîne si elle ne commence pas par ce que vous voulez. Vous aurez une pénalité de performance si vous utilisez la regex pour la première fois (vous devez le créer/le compiler).
Cette extension maintient un cache global par thread d'expressions régulières compilées (jusqu'à 4096). http://www.php.net/manual/en/intro.pcre.php
Vous pouvez vérifier si votre chaîne commence par http ou https en utilisant la petite fonction ci-dessous.
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://';