IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Expressions régulières ne fonctionnent pas [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Expressions régulières ne fonctionnent pas
    Bonjour à tous,

    Lorsque j'essaie de tester une chaîne de caractères avec un pattern du type ci dessous:

    $pattern = '#^[a-zA-Zéàèêùôîï]*$#';

    le résultat est toujours négatif, donc ma chaîne n'est jamais validée (alors qu'elle ne comporte aucun caractère interdit). Le problème vient des lettres avec accents mais je ne parviens pas à trouver la solution me permettant d'utiliser ce pattern.

    Quelqu'un peut m'aider ?

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    On peut en premier lieu imaginer un conflit d'encodage : si ton pattern est en utf-8 et que la chaîne testé est en iso-8859-1, ça ne marchera pas.

    Pour creuser plus, il nous faudrait la chaîne de test.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci s.n.a.f.u, je n'ai pas tout compris mais je vais regarder de ce côté.
    En attendant voici les pages incriminées.

    L'ensemble fonctionne bien mis à part ce problème de non validation des textes comportant des accents.

    Une page verif_inscription gère la vérification de l'enregistrement envoyé par enreg_membre.php (method=post). Si c'est ok il y a enregistrement dans une bdd sinon on revient au formulaire pour ressaisir les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
    session_start();
    $_SESSION['membre']=array();
    $_SESSION['membre']['nom']="";
    $_SESSION['membre']['prenom']="";
    $_SESSION['membre']['login']="";
    $_SESSION['membre']['email']="";
    $_SESSION['membre']['presentation']="";
    $_SESSION['erreur']="";
    /* --------------------------------
     *vérification de la validité des données
     * saisies par le nouveau membre
     -----------------------------------------*/
     
    if(isset($_REQUEST['valider']) && $_REQUEST['valider']=="Valider")
    {
        //$erreur contiendra la somme de toutes les erreurs
        //de saisie commises et sera renvoyée en cas d'échec à
        //l'enregistrement
        $erreur = "";
     
        //inclusion des fichiers de config et fonctions
        include("classes/membre.class.php");
        extract($_REQUEST);
     
        //définition d'un nouveau membre
        $membre = new membre($pseudo);
        $membre->nom = $nom;
        $membre->prenom = $prenom;
        $membre->login = $pseudo;
        $membre->mdp = $pass;
        $membre->email = $email;
        $membre->date_inscription = date("d-m-y");
        $membre->droits = "membre";
        $membre->presentation = $presentation;
        //sauvegarde des données dans une variable de session pour les récupérer
        //dans la page enreg_membre.php en cas de retour au formulaire
        $_SESSION['membre']['nom']=$nom;
        $_SESSION['membre']['prenom']=$prenom;
        $_SESSION['membre']['login']=$pseudo;
        $_SESSION['membre']['email']=$email;
        $_SESSION['membre']['presentation']=$presentation;
     
        //vérification du bon format des données
        $erreur = $membre->nouveau_is_valid();
        if($erreur!="")
        {
           $_SESSION['erreur']=$erreur;
           header("Location:enreg_membre.php");
        }
        else
        {
            include("conf/variables.php");
            // connexion à la base de données
            $link = mysql_connect($bdserver,$bdlogin,$bdpassword) or die("Impossible de se connecter à DB : " . mysql_error());
            mysql_select_db($bdd) or die(" Impossible de sélectionner la DB!");
            //vérifie si le login a été utilisé par un membre déjà inscrit
            $i = $membre->verif_meme_login();
            if($i==true)
            {
                $erreur=$erreur."Ce pseudo est déjà utilisé par un autre membre. Merci d'en utiliser un autre.<br />";
            }
            //vérifie si l'adresse mail est déjà utilisée par un autre membre
            $i = $membre->verif_meme_email();
            if($i==true)
            {
                $erreur=$erreur."Cette adresse mail est déjà utilisée par un autre membre. Merci d'en utiliser une autre.<br />";
            }
            //si des erreur sont présentes (login ou email déjà utilisé)
            if($erreur!="")
            {
                $_SESSION['erreur']=$erreur;
                header("Location:enreg_membre.php");
            }
            else
            {
                $membre->ajouter_nouveau_membre();
                mysql_close($link);
                header("Location:index.php");
            }
        }
    }
    ?>
    voici les fonctions de vérification appelées dans verif_formulaires.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    /*-------------------------------------------
     *  vérifie la validité d'une adresse mail
    ------------------------------------------- */
    function verif_email($email)
    {
        $comp="/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/";
        return(preg_match($comp,$email));
    }
    /*-------------------------------------------
     *  vérifie la validité d'un texte
     --------------------------------------------*/
    function verif_texte($texte)
    {
        $comp="/^[a-zA-Z0-9\(\)éèêàâôî,\.\' :;!\?-_]+$/";
        return(preg_match($comp,$texte));
    }
     
    /*---------------------------------------------
     *  vérifie la validité d'un nom ou d'un prénom
     ---------------------------------------------*/
    function verif_nom($texte)
    {
        $comp="/^[a-zA-Zéèêàâôî\' -]+$/";
        return(preg_match($comp,$texte));
    }
     
    /*---------------------------------------------
     *  vérifie la validité d'un pseudo
     ---------------------------------------------*/
    function verif_pseudo($texte)
    {
        $comp="/^[a-zA-Z0-9éèêàâôî -_]+$/";
        return(preg_match($comp,$texte));
    }
     
    /*---------------------------------------------
     *  vérifie la validité d'un mot de passe
     ---------------------------------------------*/
    function verif_mdp($texte)
    {
        $comp="/^[a-zA-Z0-9\(\)éèêàâôî,\.\' :;!\?-_]+$/";
        return(preg_match($comp,$texte));
    }
    ?>
    et enfin voici la classe membre utilisée dans le fichier membre.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    <?php
     
    /*------------------------------
     * definition d'un membre
     ------------------------------*/
    class un_membre
    {
     
      //définition du constructeur
      public function __construct($tableau_un_membre)
      {
         foreach($tableau_une_news as $k => $v)
         {
           $this->$k=$v;
         }
      }
    }
     
    /*----------------------------------------
     *  definition de toutes less news
     ----------------------------------------*/
    class tous_les_membres
    {
      public function chercher_les_membres()
      {
        //recherche de toutes les membres
        $query = "SELECT * FROM membres";
        $result = mysql_query($query) or die("Erreur de requète : " . mysql_error());
        $result_arr = array();
        while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
        {
          $result_arr[] = new un_membre($line);
        }
        //--------------------------
        //se déconnecter de la DB
        //--------------------------
        mysql_free_result($result);
        return $result_arr;
      }
    }
     
    //recherche un membre en récupérant son id
    class membre
    {
       //attributs enregistrés dans la BDD et qui
       //définissent un membre
       public $login;
       public $nom;
       public $prenom;
       public $mdp;
       public $presentation;
       public $idmembres;
       public $date_inscription;
       public $email;
       public $droits;
     
       function __construct($user)
       {
           $this->login=$user;
       }
       public function chercher_membre()
       {
            //rechercher un membre grace à son login
            $query = "SELECT * FROM membres WHERE login='$this->login'";
            $result = mysql_query($query) or die("Erreur de requète :".mysql_error());
            $line = mysql_fetch_assoc($result);
            return $line;
       }
     
       public function nouveau_is_valid()
       {
           //initialise le paramètre d'erreur à zéro
           $err = "";
           //inclure les fonctions de vérification de mots
           include("fonctions/verif_formulaires.php");
           //vérification du nom
           if(strlen($this->nom)>0)
           {
               if(verif_nom($this->nom)==false)
               {
                   $err = $err."Le nom comporte des caractères interdits<br />";
               }
           }
           //vérification du prénom
           if(strlen($this->prenom)>0)
           {
               if(verif_nom($this->prenom)==false)
               {
                   $err = $err."Le prénom contient des caractères interdits.<br />";
               }
           }
           //vérification du login
           if(strlen($this->login)==0)
           {
               $err = $err."Vous devez saisir un pseudo.<br />";
           }
           if(strlen($this->login)<3)
           {
               $err = $err."Le pseudo est trop court. Il doit comporter au moins 3 caractères.<br />";
           }
           if(strlen($this->login)>40)
           {
                $err = $err."Le pseudo est trop long. Il ne doit pas dépasser 40 caractères.<br />";
           }
           if(verif_pseudo($this->login)==false)
           {
               $err = $err."Le pseudo contient des caractères interdits.<br />";
           }
           //vérification du mot de passe
           if(strlen($this->mdp)==0)
           {
               $err = $err."Vous devez saisir un mot de passe.<br />";
           }
           if(strlen($this->mdp)<8)
           {
               $err = $err."Le mot de passe est trop court. Il doit comporter au moins 8 caractères.<br />";
           }
           if(strlen($this->mdp)>40)
           {
                $err = $err."Le mot de passe est trop long. Il ne doit pas dépasser 40 caractères.<br />";
           }
           if(verif_mdp($this->mdp)==false)
           {
               $err = $err."Le mot de passe contient des caractères interdits.<br />";
           }
           //vérification de l'adresse mail
           if(strlen($this->email)==0)
           {
               $err = $err."Vous devez saisir une adresse mail.<br />";
           }
           if(verif_email($this->email)==false)
           {
               $err = $err."L'adresse mail n'est pas valide.<br />";
           }
           //vérification de la présentation
           if(strlen($this->presentation)>0)
           {
               if(verif_texte($this->presentation)==false)
               {
                   $err = $err."La présentation contient des caractères interdits.<br />";
               }
           }
           return($err);
       }
     
       //vérifie si le nouveau membre utilise un login déjà employé par un membre inscrit
       public function verif_meme_login()
       {
           //rechercher un membre portant le même login que celui du nouveau membre
            $query = "SELECT login FROM membres WHERE login='$this->login'";
            $result = mysql_query($query) or die("Erreur de requète :".mysql_error());
            if(mysql_num_rows($result)>0)
            {
                 return true;
            }
            else
            {
                return false;
            } 
       }
       //vérifie si le nouveau membre utilise un email déjà employé par un membre inscrit
       public function verif_meme_email()
       {
           //rechercher un membre portant le même login que celui du nouveau membre
            $query = "SELECT email FROM membres WHERE email='$this->email'";
            $result = mysql_query($query) or die("Erreur de requète :".mysql_error());
            if(mysql_num_rows($result)>0)
            {
                 return true;
            }
            else
            {
                return false;
            }
       }
       //vérifie si le nouveau membre utilise un email déjà employé par un membre inscrit
       public function ajouter_nouveau_membre()
       {
           //ajouter un nouveau membre
           $query = "INSERT INTO membres (nom,prenom,login,mdp,email,presentation,date_inscription,droits)
                VALUES ('$this->nom','$this->prenom','$this->login','$this->mdp','$this->email',
                   '$this->presentation','$this->date_inscription','$this->droits')";
           $result = mysql_query($query) or die("Erreur de requète :".mysql_error());
       }
    }
     
    ?>
    au cas où voici le formulaire d'enregistrement enreg_membre.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?php
        session_start();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Mon forum</title>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	<meta http-equiv="Content-Style-Type" content="text/css" />
    	<meta http-equiv="Content-Language" content="fr" />
    	<link rel="stylesheet" type="text/css" href="css/styles_css.css" />
    </head>
     
    <body>
     
        <!-- conteneur de toute la page -->
        <div id="conteneur">
     
             <!-- haut de page -->
            <?php
            include("include/index_haut.php");
            ?>
     
             <!-- FORMULAIRE -->
            <div id="formulaire">
                <h3>Devenir membre</h3>
     
                <form action="verif_inscription.php" method="post">
                    <table>
                        <tr>
                            <td class="right">Nom</td>
                            <td>
                                <input type="text" name="nom" value="<?php if(isset($_SESSION['membre']['nom']))
                                    echo $_SESSION['membre']['nom']; ?>" />
                            </td>
                            <td rowspan="5">
                                <p>
                                    <?php
                                        if(isset($_SESSION['erreur']))
                                        {
                                            echo "Vous avez commis les erreurs suivantes:";
                                            echo "<br /><br />";
                                            echo $_SESSION['erreur'];
                                        }
                                    ?>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <td class="right">Prénom</td>
                            <td>
                                <input type="text" name="prenom" value="<?php if(isset($_SESSION['membre']['prenom']))
                                    echo $_SESSION['membre']['prenom']; ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td class="right">Pseudo *</td>
                            <td>
                                <input type="text" name="pseudo" value="<?php if(isset($_SESSION['membre']['login']))
                                    echo $_SESSION['membre']['login']; ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td class="right">Mot de passe *</td>
                            <td>
                                <input type="password" name="pass" />
                            </td>
                        </tr>
                        <tr>
                            <td class="right">E-mail *</td>
                            <td>
                                <input type="text" name="email" value="<?php if(isset($_SESSION['membre']['email']))
                                    echo $_SESSION['membre']['email']; ?>" />
                            </td>
                        </tr>
                    </table>
                    <table>
                        <tr>
                            <td class="right">Présentation</td>
                            <td>
                                <textarea cols="70" rows="10" name="presentation">
                                    <?php if(isset($_SESSION['membre']['presentation']))
                                        echo $_SESSION['membre']['presentation']; ?>
                                </textarea>
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td>
                                <input type="submit" name="valider" value="Valider" />
                            </td>
                        </tr>
                    </table>
                </form>
            </div>
        </div>
     
    </body>
    </html>
    Pour le moment aucune sécurité dans ces codes, j'avance pas à pas

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Je progresse !!

    J'ai remplacé le charset par utf-8 dans tous les <head> des pages HTML et maintenant les preg_match avec des accents fonctionnent. (merci s.n.a.f.u )

    Par contre l'affichage des caractères avec accent est remplacé par des signes du type é (pour un é par exemple) dans la bdd. Ce n'est pas grave à priori car l'affichage devient correct lorsque je lis les champs de la bdd pour les afficher sur mes pages. Les comparaisons de login avec accent dans la bdd fonctionnent également.

    Je pense que le problème est résolu.

    merci encore s.n.a.f.u

    Bonne année 2010 à tous !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pourquoi cette expression régulière ne fonctionne pas?
    Par mokochan dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2014, 15h42
  2. Expression régulière simple ou pas ?
    Par dollark1K dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2008, 10h13
  3. Expression régulière ne fonctionne pas
    Par Benzeghiba dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 24/06/2008, 22h01
  4. Regular expression qui ne fonctionne pas
    Par Remedy dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2007, 16h52
  5. expression for ne fonctionne pas
    Par iks22 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 10/01/2007, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo