Maison >développement back-end >tutoriel php >Pourquoi mon `preg_match()` échoue-t-il après une mise à niveau PHP ?

Pourquoi mon `preg_match()` échoue-t-il après une mise à niveau PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 19:40:15885parcourir

Why Does My `preg_match()` Fail After a PHP Upgrade?

Échec de la compilation de preg_match() dans la plage de classes de caractères en raison de la mise à niveau de PHP

L'erreur "preg_match() : Échec de la compilation : plage non valide dans classe de caractères à décalage" se produit souvent lors de l'utilisation de la fonction preg_match de PHP pour valider les noms d'utilisateur alphanumériques. Cette erreur a été signalée après les mises à niveau de PHP sur les serveurs.

Le problème provient des modifications récentes introduites dans PHP 7.3 et les versions plus récentes. PHP a migré son moteur PCRE vers PCRE2, ce qui entraîne une validation de modèle plus stricte. Plus précisément, cela concerne l'utilisation des tirets (-) dans les classes de caractères.

Dans les versions PHP antérieures à 7.3, il était possible d'utiliser des tirets dans les classes de caractères en les échappant ou en les plaçant au début ou à la fin du gamme. Cependant, dans PHP 7.3 et versions ultérieures, le moteur PCRE2 a renforcé cette exigence.

L'erreur se produit car le trait d'union dans la classe de caractères [a-z0-9]([0-9a-z_-s]) $ n'est ni au début ni à la fin de la plage. Cela entraîne l'échec de la compilation.

Pour résoudre le problème, vous devez modifier la classe de caractères comme suit :

/[a-z0-9]([0-9a-z-_ ]+)+/i

En plaçant le trait d'union à la fin de la plage, il sera interprété comme un caractère littéral au sein de la classe, plutôt que d'indiquer une plage.

Il est important de noter que d'autres modifications de syntaxe de modèle peuvent avoir été introduites avec la mise à jour de PHP 7.3. Pour plus d'informations sur ces modifications et comment elles pourraient affecter votre code, veuillez vous référer à la documentation PHP officielle sur la migration PCRE2.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn