« Et maintenant, plus en détail » : comment savoir par quoi commence une chaîne en PHP ?
\n\nChaque développeur a rencontré au moins une fois dans sa vie le problème suivant : « Cette chaîne ne commence-t-elle pas par un mot, un caractère ou un préfixe spécifique ? ». Cela peut sembler un détail, mais la logique de routage, la vérification d'URL, la validation d'email ou l'analyse des entrées utilisateur peuvent en dépendre. En PHP, comme dans tout autre langage, il existe plusieurs façons de résoudre ce problème. Mais laquelle est la bonne ? Et laquelle est la plus performante ? Et que faire si vous avez une ancienne version de PHP ?
\n\nDans cet article, nous allons passer en revue toutes les méthodes populaires pour vérifier le début d'une chaîne en PHP, des classiques comme substr et strpos jusqu'au moderne str_starts_with, apparu dans PHP 8.0. Vous apprendrez non seulement « comment », mais aussi « pourquoi » choisir telle ou telle méthode. C'est parti ! 🚀
Pourquoi vérifier le début d'une chaîne ?
\n\nImaginez que vous écrivez un analyseur de logs, que vous traitez des URL ou que vous filtrez des fichiers par extension. Ou peut-être devez-vous filtrer toutes les adresses email commençant par « admin@ ». Ou vérifier si une requête à l'API a le bon préfixe. Dans tous ces cas, vous avez besoin d'une chose : savoir si une chaîne contient une sous-chaîne donnée au tout début.
\n\nCela peut sembler une tâche triviale, mais ne pas connaître les nuances peut entraîner des bogues difficiles à détecter. Surtout si vous utilisez accidentellement strpos sans vérifier la valeur false. Examinons chaque méthode dans l'ordre.
Méthode n°1 : str_starts_with (PHP 8.0+) — moderne et évidente
\n\nDepuis PHP 8.0, le langage dispose d'une fonction dédiée str_starts_with(). Elle fait exactement ce qui est écrit sur la boîte : vérifie si une chaîne commence par une sous-chaîne donnée. Et elle le fait rapidement, de manière lisible et sans pièges cachés.
<?php\n$url = "https://pythonlib.ru";\nif (str_starts_with($url, "https://")) {\n echo "La chaîne commence par https://";\n} else {\n echo "La chaîne NE commence PAS par https://";\n}\n// Affiche : La chaîne commence par https://\n?>\n\nPourquoi est-ce génial ?
\n- \n
- ✅ Le code se lit comme un texte anglais simple : « string starts with ». \n
- ✅ Elle retourne seulement
trueoufalse— pas de vérifications supplémentaires. \n - ✅ Elle fonctionne correctement avec les encodages multi-octets (UTF-8). \n
- ✅ Elle est sensible à la casse. Si vous devez vérifier sans tenir compte de la casse, utilisez
str_starts_with(strtolower(...)). \n
Cette méthode est le leader incontesté si vous utilisez PHP 8.0 ou supérieur. Mais que faire si votre projet fonctionne encore sous PHP 7 ? Lisez la suite.
\n\nMéthode n°2 : substr — un vieil ami vaut mieux que deux nouveaux
\n\nAvant l'arrivée de str_starts_with, beaucoup utilisaient substr pour comparer le début d'une chaîne. L'idée est simple : extraire de la chaîne un morceau de la longueur souhaitée et le comparer à la sous-chaîne recherchée.
<?php\n$string = "Bonjour, le monde !";\n$prefix = "Bonjour";\n\nif (substr($string, 0, strlen($prefix)) === $prefix) {\n echo "La chaîne commence par 'Bonjour'";\n} else {\n echo "La chaîne NE commence PAS par 'Bonjour'";\n}\n?>\n\nAvantages :
\n- \n
- Fonctionne sur n'importe quelle version de PHP. \n
- Logique compréhensible. \n
Inconvénients :
\n- \n
- Il faut penser à utiliser
strlen()— il est facile de se tromper sur la longueur. \n - Si la chaîne est plus courte que le préfixe,
substrretournera une chaîne vide, et la comparaison échouera (mais ne plantera pas). \n - Moins lisible que l'alternative moderne. \n
Néanmoins, c'est une option parfaitement fonctionnelle qui ne vous décevra pas. L'essentiel est de ne pas oublier d'utiliser la comparaison stricte ===.
Méthode n°3 : strpos — astucieuse mais dangereuse
\n\nUne autre approche classique consiste à utiliser strpos(). La fonction recherche la première occurrence d'une sous-chaîne dans une chaîne. Si la sous-chaîne est trouvée à la position 0, cela signifie que la chaîne commence par cette sous-chaîne. Mais attention : si la sous-chaîne n'est pas trouvée du tout, strpos() retourne false, et en PHP, false == 0 est vrai ! C'est pourquoi vous devez toujours utiliser l'opérateur ===.