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 ?

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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 21:48:15830parcourir

Why Am I Getting

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

  • PCRE2 dispose d'un moteur Unicode plus strict, ce qui peut affecter le comportement de certains invalides modèles.
  • Assurez-vous que votre code utilise le placement correct des traits d'union pour les classes de caractères afin d'éviter les erreurs de compilation.
  • Reportez-vous à la documentation PHP pour plus de détails sur ces modifications et problèmes de compatibilité.

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