[RESOLU] Filtrage de pseudo contenant des espaces avec une regex

Petit nouveau ! | 2 Messages

31 juil. 2020, 11:58

Bonjour,

Dans le cadre d'un projet de création d'un forum, j'utilise les données d'un formulaire html d'inscription, que je contrôle avec des expressions régulières avant de les envoyer dans une base de donnée.
À cet effet, je souhaite notamment vérifier que le pseudo ne contienne aucun espace avant de confirmer l'envoi du formulaire. Le problème est que la condition que je pose ne fonctionne pas. En effet, il m'est possible d'enregistrer des Pseudo contenant des espaces malgré ma condition. À noter que les autres conditions fonctionnent. À cet effet, la vérification que le pseudo n'a aucun espace se trouve à la 4ème ligne du code ci-dessous. J'inclus quand même l'étape suivante de vérification pour aider la compréhension.

Voici donc le code:

Code : Tout sélectionner

<?php if(isset($_POST['pseudo'])) { if(preg_match('#[^ ]#', $_POST['pseudo']))//Controle que le pseudo ne contient aucun espace { if(preg_match('#[a-zA-Z0-9.-_]{3,}#', $_POST['pseudo'])) //Contrôle que le pseudo contient 3 à 20 caractères { $pseudo = htmlspecialchars($_POST['pseudo']); //Enregistre le pseudo en tant que '$pseudo' echo $pseudo.'<br/>'; }else { $pseudonotok=true; echo 'Le pseudo doit contenir au moins 3 caractères et aucun espace <br/>'; } }else { $pseudonotok=true; echo 'Le pseudo doit contenir au moins 3 caractères et aucun espace <br/>'; } }?>

Quelqu'un a t-il une idée de la façon de remplacer ma Regegex "#[^ ]#" pour m'assurer que le mot de passe n'a aucun espace ?
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8518 Messages

31 juil. 2020, 15:00

Tu peux supprimer ton premier "if" car ton deuxième suffit en ajoutant juste les symnoles ^ et $ qui symbolisent le début et la fin de ta chaine de caractère :
<?php
if (isset($_POST['pseudo'])) {
    if (preg_match('#^[a-zA-Z0-9.-_]{3,20}$#', $_POST['pseudo'])) { //Contrôle que le pseudo contient 3 à 20 caractères
        $pseudo = htmlspecialchars($_POST['pseudo']); //Enregistre le pseudo en tant que '$pseudo'
        echo $pseudo.'<br/>';
    }else{
        $pseudonotok=true;
        echo 'Le pseudo doit contenir au moins 3 caractères et aucun espace <br/>';
    }
}
?>
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

31 juil. 2020, 17:37

Excellent, ça marche. Merci beaucoup ! :D