Le message d'erreur "preg_match() : Échec de la compilation : plage non valide dans la classe de caractères" indique un problème avec l'expression régulière utilisée dans le code fourni. Ce problème peut survenir après une mise à niveau de PHP, en particulier lors de la migration de versions antérieures vers PHP 7.3 ou plus récentes en raison de modifications apportées à la bibliothèque PCRE2.
Avec PHP 7.3 , le moteur PHP PCRE est passé à PCRE2, provoquant plusieurs modifications rétrocompatibles :
Avant PHP 7.3, les traits d'union pouvaient être utilisés dans les classes de caractères dans n'importe quelle position s'ils étaient échappés ou placés là où ils ne pouvaient pas indiquer de plage. Cependant, dans PHP 7.3 et versions ultérieures, PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL est défini sur false par défaut.
Par conséquent, pour inclure un trait d'union dans une classe de caractères :
Dans le code fourni, la ligne problématique est :
if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
Le problème vient du trait d'union (-) dans le caractère classe [0-9a-z_-s]. Pour résoudre ce problème, placez le trait d'union à la fin ou au début :
if(!preg_match("/^[a-z0-9]([0-9a-z\_-\s0-9a-z\_-\s])+$/i", $subuser)){
"PHP 7.3 : PCRE2 a supprimé PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL" fournit des informations supplémentaires :
PCRE2 est plus strict dans les validations de modèles, donc après la mise à niveau, certains de vos modèles existants pourraient ne compile plus.
Par conséquent, un examen minutieux et une modification des modèles existants peuvent être nécessaires pour garantir la compatibilité avec PCRE2 dans PHP 7.3 et versions ultérieures.
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!