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

JavaScript Discussion :

Contrôle de saisie [RegExp]


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 23
    Par défaut Contrôle de saisie
    Bonjour,

    Voilà avant de traité mon formulaire je fais un contrôle de saisie de mes champs. le problème est que ça coince à un endroit mais je ne sais pas pourquoi...
    Voici mon code :
    Code javascript : 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
    function surligne(champ, erreur){
        if(erreur)
            champ.style.backgroundColor = "#fba";
        else
            champ.style.backgroundColor = ""; 
    }
     
    function verifNom (champ){
        var regex = /^[A-Z -]+$/;
     
        if (!regex.test(champ, true)){
            surligne(champ, true);
            return false;
        }
        else{
            surligne(champ, false);
            return true;
        }
    }
     
    function verifPrenom (champ){
        var regex = /^[a-zA-Z -]+$/;
        if (!regex.test(champ, true)){
            surligne(champ, true);
            return false;
        }
        else{
            surligne(champ, false);
            return true;
        }
    }

    Code php : 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
    function profile (){
        include('../../config/connexion-bdd.php');
        $utilisateurConnecte=$_POST['utilisateur-connecte'];
     
        //récuperation des utilisateurs ayant le même login que l'utilisateur connecté
        $req="SELECT nom, prenom, email, identifiant FROM utilisateurs WHERE identifiant='".$_SESSION['identifiant']."'";
        $res= $connect->query($req);
        //var_dump($res);
     
        if ($row = $res->fetch(PDO::FETCH_ASSOC)){
                echo '<form id="formulaireMdp" name="nouveau-mot-de-passe" action="confirme-mot-de-passe.php" method="post" class="mot-de-passe" onsubmit="return validationProfile(this)">
                  <fieldset>
                    <legend>Profile</legend>
                    <div class="content-mdp">
                        <label for="nom">Nom </label>
                        <input id="nom" type="text" name="nom" onblur="verifNom(this)" size="25px" value="'.$row['nom'].'"><br />
                      <label for="prenom">Prénom </label>
                        <input id="prenom" type="text" name="prenom" onblur="verifPrenom(this)" size="25px" value="'.$row['prenom'].'"><br />
                      <label for="email">E-mail</label>
                        <input id="email" type="text" name="email" onblur="verifEmail(this)" size="25px" value="'.$row['email'].'"><br />
                      <label for="identifiant">Identifiant</label>
                      <input id="identifiant" type="text" name="identifant" onblur="verifIdentifiant(this)" size="25px" value="'.$row['identifiant'].'"><br />
                        <input type="hidden" name="utilisateur-connecte" value="'. $_SESSION['identifiant'].'" />
                      <button id="auth-submit" type="submit" name="submit">Modifier</button>
                    </div>';
            }
    }

    Mon problème est au niveau du nom et prénom. Selon mon expression (/^[A-Z -]+$/) si je rentre un nom du type "THIBAULT" ce dernier ne devrait plus être souligné, mais rien à faire...
    Et c'est le même problème avec le prénom. l'expression est "/^[a-zA-Z -]+$/" et si je rentre un prénom du type "Thibault" il est toujours souligné ...

    Voici le problème en image :

    Nom : regex-pb.png
Affichages : 453
Taille : 3,9 Ko

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    À vue de nez, en survolant le code:

    La méthode RegExp.prototype.test() n'accepte qu'un seul paramètre qui est la chaîne à verifier, donc le mystérieux paramètre true n'a rien à faire là.

    De plus, en utilisant le boolean retourné par test on peut virer le if (On peut aussi se passer de la variable regex qui de toute manière n'est utilisée qu'un seule fois):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function verifNom (champ) {
        var testResult = /^[A-Z -]+$/.test(champ);
     
        surligne(champ, !testResult);
        return testResult;
    }
    idem pour verifPrenom().

    Autre chose, est-ce que la valeur de retour de verifNom et de verifPrenom est exploitée quelque part? Sinon, autant supprimer le return.

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut
    Bonsoir.

    J'ai simplifié, notamment en éliminant votre fonction surligne()... :
    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
    function verifNom (champ)
    {
    if ( /^[A-Z]+([ -][A-Z]+)*$/.test(champ) )
         {
         champ.style.backgroundColor = "silver";
         return false;
         }
    else {
         champ.style.backgroundColor = "white";
         return true;
         }
    }
     
    function verifPrenom (champ)
    {
    if ( /^[A-Z][a-z]+([ -][A-Z][a-z]+)*$/.test(champ) )
         {
         champ.style.backgroundColor = "silver";
         return false;
         }
    else {
         champ.style.backgroundColor = "white";
         return true;
         }
    }
    - J'ai modifié vos regex (Attention c'est pas testé) NOMS et Prénoms Composés sont acceptés (les seuls " " et "-" sont autorisés comme séparateur)
    - J'utilise des noms de la table des couleurs au lieu des codes qui ne veulent pas dire grand chose (voyez la table des couleurs CSS...)
    - J'ai laissé les return, je pense qu'ils sont utiles...
    Voilà

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 23
    Par défaut
    Bonsoir,
    Excusez-moi de ne répondre que maintenant.

    Citation Envoyé par CosmoKnacki
    Autre chose, est-ce que la valeur de retour de verifNom et de verifPrenom est exploitée quelque part? Sinon, autant supprimer le return.
    Oui les valeurs de verifNom et verifPrenom sont exploitées donc une fonction validant l'envoie du formulaire.

    Quant à iakou, j'ai testé tes fonctions et j'ai toujours le même problème... J'ai toujours la couleur de fond avec une casse correcte...

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Le paramètre champ que tu passes à tes fonctions, il sort d'où et représente quoi ?
    Si on se fie à son nom, il représente un champ (de formulaire j'imagine) donc un objet DOM et la condition if ( /^[A-Z][a-z]+([ -][A-Z][a-z]+)*$/.test(champ) ) ne peut jamais être vraie puisque qu'un objet DOM n'est pas une chaine...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 23
    Par défaut
    champ, si je me trompe pas est mon paramètre en pour le onblur(this) de mon input du formulaire. Donc il récupère la saisie et la compare par rapport à l'expression rationnelle, je me trompe ? (je suis pas forcement alaise sur le DOM ....)
    Donc si un objet DOM n'est pas une chaine comment je dois m'y prendre ?

    Par un document.getElementById() et là faire le test par rapport à mon expression rationnelle. Et par le résultat obtenu retourner un true ou false ?

    Merci encore de votre aide à tous

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Donc il récupère la saisie et la compare par rapport à l'expression rationnelle, je me trompe ?
    Oui, tu te trompes.
    Comment récupérer la valeur d'un champ texte ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if ( /^[A-Z][a-z]+([ -][A-Z][a-z]+)*$/.test(champ.value) ) 
    Si vous aviez passé l'objet "this" vers votre fonction verifNom(champ) utilisez alors champ.value dans celle-ci...

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ou comment mâcher le travail ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 23
    Par défaut
    Citation Envoyé par SpaceFrog
    ou comment mâcher le travail ...
    Je ne pense pas que iakou voulait me mâcher le travail...En plus de ça je connais se paramètre value mais j'avoue que je n'ai pas du tout pensé à cette erreur possible.
    Cela n'empêche que j'ai quand même lu le lien de Bovino !

    Encore merci à vous tous !

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

Discussions similaires

  1. Contrôle de saisie formulaire
    Par miram dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/02/2006, 08h33
  2. contrôle de saisie sur un espace
    Par oceane751 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 12h04
  3. contrôle de saisie menu déroulant
    Par shnouf dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 05/01/2006, 16h30
  4. contrôle de saisie
    Par oceane751 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2006, 11h24
  5. [debutant] contrôle de saisie et formulaire
    Par oceane751 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/11/2005, 22h29

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