Maison >développement back-end >tutoriel php >Pourquoi `preg_match()` échoue-t-il avec « Plage non valide dans la classe de caractères » après une mise à niveau PHP ?

Pourquoi `preg_match()` échoue-t-il avec « Plage non valide dans la classe de caractères » après une mise à niveau PHP ?

DDD
DDDoriginal
2024-12-09 01:11:10625parcourir

Why Does `preg_match()` Fail with

preg_match() : plage non valide dans la classe de caractères après la mise à niveau de PHP

L'erreur "preg_match() : échec de la compilation : plage de caractères non valide class at offset" se produit généralement lorsqu'un trait d'union (-) est utilisé de manière incorrecte dans une classe de caractères dans une expression régulière.

Dans le code fourni extrait :

else if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){

Il y a un trait d'union "-" dans la classe de caractères [0-9a-z_-s]. Dans les anciennes versions de PHP, échapper le trait d'union avec une barre oblique inverse ou le placer au début ou à la fin de la classe de caractères permettait son utilisation.

Modifications PHP 7.3 et PCRE2

Cependant, avec PHP 7.3 et la migration vers la bibliothèque PCRE2, l'utilisation du trait d'union est plus restreinte. Dans PCRE2, les traits d'union ne peuvent être utilisés qu'au début ou à la fin d'une classe de caractères.

Pour résoudre ce problème, modifiez la classe de caractères comme suit :

else if(!preg_match("/^[a-z0-9]([0-9a-z_0-9_-])+$/i", $subuser)){

Cela place le trait d'union à le début de la classe de personnage, permettant de l'utiliser correctement.

Supplémentaire Notes

  • Échapper au trait d'union avec , comme suggéré dans la réponse fournie, n'est plus nécessaire dans PHP 7.3 et supérieur.
  • La bibliothèque PCRE2 peut introduire d'autres modifications dans la version régulière syntaxe des expressions. Il est important de consulter la documentation et d'apporter les ajustements nécessaires à votre code lors de la mise à niveau vers PHP 7.3 ou version ultérieure.

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