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 ?
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
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!