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
Libérer: 2024-12-18 19:40:15
original
891 Les gens l'ont consulté

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal