2017-06-15 1 views
0

Dans une ancienne version de la docebo cms Il y a une vérification avec preg_match(), qui génère cependant une erreur et renvoie false, Évidemment, il y a quelque chose qui ne va pas dans le modèle Mais probablement avec une ancienne version de PHP cela a fonctionné Est-ce que quelqu'un sait où l'erreur est, Et comment serait-il corrigé?regexpr avec preg_match(), motif généré erreur

$str="my_session"; 
clean_input_keys($str); 

protected function clean_input_keys($str) { 
    $pattern = '#^[&a-zA-Z0-9\.:_/-\s]+$#uD'; 
    $b_preg_match = preg_match($pattern, $str); 
    var_dump($b_preg_match); //false //preg_match() returns FALSE if an error occurred. 
    if (! $b_preg_match) { 
     exit('Disallowed key characters in global data.'); 
    } 
    return $str; 
} 
+0

Vous utilisez la bibliothèque de développeur Apple? Avez-vous lu le message d'erreur? –

+1

Le fragment '/ - \ s' ne semble pas être valide. Je suggère plutôt '/ \ s-' à la place. –

+0

Exactement, en ce moment qui essaie de spécifier un _caracter class_ "de/à un espace" ici, ce qui bien sûr n'a aucun sens. (Btw., La prochaine fois citez le message d'erreur s'il vous plaît, au lieu de simplement nous dire que vous en avez un ...) – CBroe

Répondre

2

Notez que preg_match renvoie false s'il y a une erreur dans le motif:

preg_match() renvoie 1 si le motif correspond donné l'objet, 0 si elle n'a pas, ou FAUX si une erreur eu lieu.

L'erreur est PHP throws

PHP Warning: preg_match(): Compilation a échoué: plage non valide dans la classe de caractères à décalage 19 dans /home/VaTQ68/prog.php à la ligne 5

Le tiret sans échappement à l'intérieur d'une classe de caractères peut former une plage. Une plage comprise entre / et \s n'est pas définie, d'où l'erreur.

Vous devez mettre le trait d'union à la fin ou le début de la classe de caractères, ou échapper:

$pattern = '#^[&a-zA-Z0-9\.:_/\s-]+$#uD'; 
           ^

Voir la PHP demo