preg_match() : échec de la compilation en raison d'une plage de classes de caractères non valide
Le message d'erreur "preg_match() : échec de la compilation : plage non valide dans classe de caractères au décalage 20" indique qu'un modèle d'expression régulière contient une plage de classes de caractères non valide. Dans ce cas, le problème est soudainement apparu après une mise à niveau de PHP sur le serveur, et nous en explorerons les raisons.
Raison de l'erreur :
PHP 7.3 a mis à niveau le moteur PCRE (Perl Compatible Regular Expressions) vers PCRE2, ce qui a apporté plusieurs changements, notamment une validation plus stricte des modèles. En particulier, le trait d'union (-) est désormais traité différemment dans les classes de caractères.
Extrait de code :
Le code fourni utilise une expression régulière pour valider les noms d'utilisateur :
/^[a-z0-9]([0-9a-z_-\s])+$/i
Dans les versions précédentes de PHP, le trait d'union pouvait être utilisé n'importe où dans une classe de caractères s'il était échappé ou placé là où il ne pouvait pas être interprété comme un indicateur d'une plage.
Impact de PHP 7.3 :
Avec PCRE2, l'échappement () n'est plus ignoré dans les classes de caractères avec trait d'union. Cela signifie que dans PHP 7.3 et versions ultérieures, le code ci-dessus doit être mis à jour vers :
/^[a-z0-9]([0-9a-z_-]\s)$/i
Solution :
Pour résoudre l'erreur de compilation, assurez-vous que le caractère avec trait d'union les cours suivent ces règles :
Informations supplémentaires :
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!