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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Filtrage de pseudo contenant des espaces avec une regex

Re: Filtrage de pseudo contenant des espaces avec une regex

par TimoRadio » 31 juil. 2020, 17:37

Excellent, ça marche. Merci beaucoup ! :D

Re: Filtrage de pseudo contenant des espaces avec une regex

par @rthur » 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/>';
    }
}
?>

Filtrage de pseudo contenant des espaces avec une regex

par TimoRadio » 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