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 :

Vérifications d'informations [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut Vérifications d'informations
    Bonjour.

    Je suis en train de mettre en place un module en PHP afin d'inscrire des utilisateurs sur un site.

    J'ai besoin de créer des conditions qui me vérifient les caractères de différents champs.

    J'en ai plusieurs sur lesquelles je bloque. Je débute tout juste sur les expressions régulières et j'ai du mal.

    En premier lieu la date de naissance.

    Je veux qu'elle soit de la forme 10/02/1989.

    Pour cela j'ai écris le code suivant :

    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
    if(preg_match("#^[0-30-9]{1}/[0-10-9]{1}/[1-20-90-90-9]{1}$#",$_POST['Date_naissance'])) // Si le nom est valide
    {
     
    // Ajout des valeurs contenues dans les champs du formulaire à la table Inscription_AQCV_individuelle
    $requete = "INSERT INTO Inscription_AQCV_individuelle (Nom, Prenom, Date_naissance, Adresse, Adresse_Email, Ville, Code_postal,
    Telephone, Secteur, Sexe) VALUES
    ('" . $_REQUEST["Nom"] . "' , '" . $_REQUEST["Prenom"] . "' ,
    '" . $_REQUEST["Date_naissance"] . "' , '" . $_REQUEST["Adresse"] ."' , '" . $_REQUEST["Adresse_Email"] . "' ,
    '" . $_REQUEST["Ville"] ."' , '" . $_REQUEST["Code_postal"] . "' , '" . $_REQUEST["Telephone"] . "' ,
    '" . $_REQUEST["Secteur"] . "' , '" . $_REQUEST["Sexe"] . "')";
     
     
    $resultat = mysql_query ($requete, $connexion); // Execution de la requête
    if ($resultat)
    {
    echo "<span class='rouge'>Votre inscription a bien été prise en compte.<br /><br />
    Un email va vous être envoyé à l'adresse que vous avez entré, afin de finaliser votre inscription.<br /><br />
    Vous pouvez maintenant cliquer sur Retour.\n</span>"; // Si la requête a réussi
    }
     
    else
    {
    echo "<span class='rouge'>Exécution de la requête impossible !<br/>\n</span>"; // Si la requête a échoué
    echo "<span class='rouge'>Message de MySQL : </span>", mysql_error($connexion); // Si la requête a échoué
    }
    mysql_close($connexion); // Fin de la connexion à la base
    }
     
    else
    {
    echo'<span class="rouge">Vérifier la syntaxe de votre date de naissance !<br/>
    Elle doit être de la forme : 10/02/1989 !</span>'; // Message d'information
    }
    Mais cela ne marche pas !
    D'où vient le problème ?
    Merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    J'ai trouvé la solution à mon problème de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    Par contre, je bloque maintenant pour la vérification d'un champ nom.
    Je veux que le champ commence par un caractère majuscule ou minuscule, et que soient autorisés : des caractères, majuscules et minuscules, espaces, apostrophes ', tiret haut -.

    J'ai écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[a-zA-Z]{1,}[a-zA-Z]{1,}[' -]{1,}[^0-9]{1,}$#",$_POST['Nom']))
    Mais cela ne marche pas...

  4. #4
    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 : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

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

    Je fais juste un saut, donc malheureusement pas le temps pour l'instant de t'aider vraiment, mais saches juste que le quantifieur {1} est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    peut être écrite plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$#",$_POST['Date_naissance']))
    Pour le reste, j'aurais plus de temps après m'être remis des fêtes

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    J'ai trouvé la solution à mon problème de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Il n'y a aucune réelle validation avec ce code, checkdate() peut-être utile.

    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
     
    <?php
     
    $date_naissance = '29/02/1991';
     
    $regex = '@^(?P<jour>\d{1,2})([/ .-])(?P<mois>\d{1,2})\2(?P<annee>\d{4})$@D';
     
    if (
         preg_match($regex, $date_naissance, $match) &&
         checkdate($match['mois'], $match['jour'], $match['annee'])
       )
    {
      echo 'DATE VALIDE: ', $date_naissance;
    }
    else echo 'la DATE ', $date_naissance, ' est fausse.';
     
    ?>
    Citation Envoyé par Crunkman
    Par contre, je bloque maintenant pour la vérification d'un champ nom.
    Avec un moteur PCRE pas trop vieux, il est possible d'utiliser \pL pour les lettres, toutes les lettres (ex. accents) et seulement les lettres. \pL est aussi compatible ISO comme UTF-8 (avec option u).

    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
     
    <?php
     
    $prenom = 'Jean-Paul';
    $nom = 'de l\'Érable';
     
    $regex = '@^(\pL+[\' -]?)+\pL+$@D'; // ajouter l'option u si UTF8
     
    if (
         preg_match($regex, $prenom) &&
         preg_match($regex, $nom)
       )
    {
      echo 'CONFORME AUX RÈGLES: ', $prenom, ' ', $nom;
    }
    else echo $prenom, ' ', $nom, ' n\'est pas conforme aux règles.';
     
    ?>

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    jml94 --> Merci de ta réponse. J'ai pu amélioré ma regex et ça donne cela pour la date de naissance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#^[01-31]{2}/[01-12]{2}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Tisha Carpenter --> Merci de ton aide pour mon champ nom, cela marche parfaitement !
    Par contre il subsiste un problème pour ce champ : lorsque j'écris par exemple le nom O'Railey et que j'appuie sur mon bouton envoyer, un message d'erreur apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Exécution de la requête impossible !
    Message de MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Railey' , 'Raf' , '10/02/1900' , '270, sdgfgsdxgsg' , 'cbbbb@dhgdt.fr' ' at line 3"
    Il y a un problème avec l'apostrophe de O'Railey, mais pourquoi ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Crunkman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Exécution de la requête impossible !
    Message de MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Railey' , 'Raf' , '10/02/1900' , '270, sdgfgsdxgsg' , 'cbbbb@dhgdt.fr' ' at line 3"
    Il y a un problème avec l'apostrophe de O'Railey, mais pourquoi ?
    mysql_real_escape_string() doit toujours être appliqué sur tous les champs d'un formulaire avant d'utiliser mysql_query().

    Citation Envoyé par Crunkman
    J'ai pu amélioré ma regex et ça donne cela pour la date de naissance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(preg_match("#^[01-31]{2}/[01-12]{2}/[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}$#",$_POST['Date_naissance']))
    Ce n'est pas bon du tout. [01-31]{2} veut dire que le caractère 0 ou les caractères de 1 à 3 ou encore le caractère 1 doivent être présent 2 fois. Donc 04 sera rejeté et 32 sera accepté.

    Il faut utilisé la regex de jml94 si le code avec checkdate() semble venir d'une autre planète. Quoi que le 29 Février 1991 n'a jamais existé, pas plus que le 31 Juin 2008... donc checkdate() a son utilité à mon avis.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    Merci ! Je vais donc reprendre la regex de Jml ! Par contre pour mon champ "nom" et mon erreur je ne comprends pas concrètement ce que je dois faire

  9. #9
    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 : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Tisha Carpenter Voir le message
    Avec un moteur PCRE pas trop vieux, il est possible d'utiliser \pL pour les lettres, toutes les lettres (ex. accents) et seulement les lettres. \pL est aussi compatible ISO comme UTF-8 (avec option u).
    Salut Tisha,

    Une petite aparté sur ce sujet : aurais-tu une doc sur le sujet. Je ne connaissais pas et ça semble intéressant.

  10. #10
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Salut Tisha,

    Une petite aparté sur ce sujet : aurais-tu une doc sur le sujet. Je ne connaissais pas et ça semble intéressant.
    Bonjour,
    http://www.regular-expressions.info/unicode.html

    En revanche, quel est cette option "D" dans le regexp de Tisha ?

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

Discussions similaires

  1. [RegEx] Vérifications d'informations
    Par Crunkman dans le forum Langage
    Réponses: 1
    Dernier message: 20/01/2009, 17h16
  2. MF vérification informations banques
    Par ge-lt dans le forum SAP
    Réponses: 9
    Dernier message: 06/02/2008, 12h15
  3. Réponses: 12
    Dernier message: 08/03/2006, 17h27
  4. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48
  5. [PRO*C] Recherche information
    Par Anonymous dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 04/04/2002, 17h53

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