Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens « preg_match() : échec de la compilation : plage non valide dans la classe de caractères » après ma mise à niveau PHP ?
Plage non valide dans la classe de caractères après la mise à niveau de PHP
Cette erreur, "preg_match() : Échec de la compilation : plage non valide dans la classe de caractères au décalage 20", se produit généralement lorsqu'une mise à niveau de PHP introduit des modifications dans le moteur PCRE ou le moteur Unicode utilisé dans votre code.
Migration PHP PCRE2
PHP 7.3 et les versions ultérieures utilisent PCRE2, qui a introduit plusieurs modifications rétrocompatibles. L'un de ces changements est la validation plus stricte des modèles de classe de caractères.
Traits d'union dans les classes de caractères
Auparavant, vous pouviez échapper un trait d'union (-) et l'utiliser n'importe où dans un classe de caractère. Cependant, à partir de PHP 7.3, vous devez placer le trait d'union uniquement au début ou à la fin de la classe de caractères.
Solution
Pour résoudre cette erreur, assurez-vous que les tirets (-) sont placés correctement dans les classes de caractères. Si vous devez utiliser un trait d'union comme caractère dans la classe, vous devez y échapper (par exemple, -).
Exemple
// Invalid (in PHP 7.3+) preg_match("/^[a-z0-9]([0-9a-z_\-\s])+$/i", $subuser); // Valid (in PHP 7.3+) preg_match("/^[a-z0-9]([0-9a-z\-_\s])+$/i", $subuser);
Supplémentaire Considérations
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!