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 :

Verification formulaire adresse email


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut Verification formulaire adresse email
    slt à tous,
    j'aurais besoin de votre aide pour vérifier un champ email. Comme javascript n'est pas ma tasse de thé je fait appel à vous.

    j'ai déjà bricolé un petit truc.

    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
    function envoyer(formulaire){
     
    		if (formulaire.usermail.value=="")
                    {
                    alert("Veuillez indiquer un e-mail.");
                    document.formulaire.usermail.focus();
                    return false;
                    }
     
    		if(formulaire.usermail.value.search(/ /) != '-1')
    				{
    				alert('Une adresse e-mail ne peut contenir un espace !');
    				return(false);
    				}
      // Pour finir, nous vérifions le format. 
      // Pour cela, nous fractionnons l'adresse en deux.
      // (avant et après le caractère"@"
    				t = formulaire.usermail.value.split(/@/);
      // Avec un seul caractère "@" il ne peut y avoir que deux parties.
    		if((t.length != 2) || t[0] == '' || t[1] == '')
    				{
    				alert('Une adresse e-mail doit avoir le format "Utilisateur@Domain",\n'
    				+'par ex. : "bob.dupont@fai.fr"');
    				return(false);
    				}	
    formulaire.submit();
    }
    mais je sens que je vais tombé sur des intellectuels qui vont me mettre des ":" ou ";" ou autre dans l'adresse mail.

    Comment je peux faire pour éviter ca.
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Le mieux est de faire toutes les vérifications en une seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var word = "[a-zA-Z0-9!#$%&'*\/=?^_`{|}~+-]";
    var dot = "(\.(?!\.))";
    var subPart = word+"("+word+"|"+dot+")*"+word;
     
    if (formulaire.usermail.value.search("^"+subPart+"@"+subPart+"$") == -1) {
    	alert('Une adresse e-mail doit avoir le format "Utilisateur@Domain",\n'+'par ex. : "bob.dupont@fai.fr"');
    	return(false);
    }
    Ok c'est un peu complexe comme regex étant donné que les caractères acceptés dans une adresse mail sont assez nombreux et que le format est assez chiant à retranscrire (pas de ".." ni de ".@", ...).
    Pis là ça n'accepte pas les adresses dont la première partie comporte 1 seule lettre (exemple : a@fai.com) mais je pense que c'est suffisament rare pour être toléré. ^_^

    Ceci dit j'ai lu en diagonal, tu trouveras plus d'info ici : http://en.wikipedia.org/wiki/Email_address#Syntax

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Au passage si c'est pour être récupéré par un script php tu pourras complémenter cette première vérification par http://php.net/manual/en/filter.examples.validation.php

    L'avantage d'utiliser une fonction interne par rapport à un regex c'est que la fonction va évoluer avec les versions de php et sera donc mise à jour suivant les éventuelles évolutions de la syntaxe des mail. C'est pour cette raison que je fais une vérification très sommaire avec javascript et qu'ensuite je fais la validation plus poussée avec php

  4. #4
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par ABCIWEB
    Au passage si c'est pour être récupéré par un script php tu pourras complémenter cette première vérification par http://php.net/manual/en/filter.examples.validation.php
    Bof bof... FILTER_VALIDATE_EMAIL est quelque peu laxiste par rapport aux formats acceptés...
    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

  5. #5
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Le mieux est de faire toutes les vérifications en une seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var word = "[a-zA-Z0-9!#$%&'*\/=?^_`{|}~+-]";
    var dot = "(\.(?!\.))";
    var subPart = word+"("+word+"|"+dot+")*"+word;
     
    if (formulaire.usermail.value.search("^"+subPart+"@"+subPart+"$") == -1) {
    	alert('Une adresse e-mail doit avoir le format "Utilisateur@Domain",\n'+'par ex. : "bob.dupont@fai.fr"');
    	return(false);
    }
    Ok c'est un peu complexe comme regex étant donné que les caractères acceptés dans une adresse mail sont assez nombreux et que le format est assez chiant à retranscrire (pas de ".." ni de ".@", ...).
    Pis là ça n'accepte pas les adresses dont la première partie comporte 1 seule lettre (exemple : a@fai.com) mais je pense que c'est suffisament rare pour être toléré. ^_^

    Ceci dit j'ai lu en diagonal, tu trouveras plus d'info ici : http://en.wikipedia.org/wiki/Email_address#Syntax
    j'ai testé ton code, mais pour le coup plus aucun mail ne passe ....
    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
     
    function envoyer(formulaire){
     
    		if (formulaire.usermail.value=="")
                    {
                    alert("Veuillez indiquer un e-mail.");
                    document.formulaire.usermail.focus();
                    return false;
                    }
     
    var word = "[a-zA-Z0-9!#$%&'*\/=?^_`{|}~+-]";
    var dot = "(\.(?!\.))";
    var subPart = word+"("+word+"|"+dot+")*"+word;
     
    if (formulaire.usermail.value.search("^"+subPart+"@"+subPart+"$") == -1) {
    	alert('Une adresse e-mail doit avoir le format "Utilisateur@Domain",\n'+'par ex. : "bob.dupont@fai.fr"');
    	return(false);
    }
    formulaire.submit();
    }
    Ai je une erreur ???

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Bof bof... FILTER_VALIDATE_EMAIL est quelque peu laxiste par rapport aux formats acceptés...
    Sans doute mais je préfère cela que l'inverse

    Comme de toutes façons on pourra toujours envoyer une adresse bidon au bon format je ne trouve pas vraiment d'intérêt à être trop strict, ce qui pourrait potentiellement amener à refuser des adresses valides en cas d'évolution des formats acceptés.

    Tu l'aura compris, j'aime bien les codes qui durent longtemps (pour éviter de la maintenance) et donc je me vois mal avoir un oeil en permanence sur l'évolution des formats pour me dire ensuite qu'il me faut aller modifier les regex de contrôle dans tous mes sites

    Encore s'il s'agissait de valider réellement l'adresse, ça pourrait se justifier, mais comme il s'agit juste de valider un format pour limiter les erreurs de saisies...

  7. #7
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    le but étant ici simplement une vérification lors de l'inscription.
    cela envoie ensuite un mail à l'inscrit.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui donc dans ce cas je serais assez coulant puisque le visiteur à tout intérêt à indiquer une bonne adresse.

    Un minimum serait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function validateForm()
    {
    var x=document.forms["myForm"]["email"].value
    var atpos=x.indexOf("@");
    var dotpos=x.lastIndexOf(".");
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
      {
      alert("Not a valid e-mail address");
      return false;
      }
    }
    Source http://www.w3schools.com/jS/js_form_validation.asp


    Par ailleurs, si ça peut te rendre service j'avais fait un petit exemple de contrôle javascript de formulaire ici (le code est complet y'a plus qu'à copier-collé et tester)

  9. #9
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    re,
    je sais que le visiteur a plutôt intérêt a mettre la bonne adresse, mais comme le site s'adresse à des gens qui sont pas spécialement des fans j'aurais voulu ajouter quelque restriction complémentaire par rapport à mon code de base qui évite déjà quel souci.
    pour exemple j'ai quelqu'un qui ma écrit une adresse du type :

    blablabla;bob@fai;fr

    je cherche surtout a éviter ce genre d'erreur.

  10. #10
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par spawns Voir le message
    j'ai testé ton code, mais pour le coup plus aucun mail ne passe ....
    Ai je une erreur ???
    Non, mais j'avais pas testé la regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function envoyer(formulaire){	
    	var word = "[a-zA-Z0-9!#$%&'*\/=?^_`{|}~+-]";
    	var dot = "(\.[^.])";
    	var subPart = word+"("+word+"|"+dot+")+";
     
    	if (formulaire.usermail.value.search("^"+subPart+"@"+subPart+"$") == -1) {
    		alert('Veuillez indiquer une adresse e-mail suivant le format "Utilisateur@Domain",\n'+'par ex. : "bob.dupont@fai.fr"');
    		return(false);
    	}
    	formulaire.submit();
    }
    En fait le var dot = "(\.(?!\.))"; n'était pas bien interprété, je comprends pas pourquoi.
    Normalement il devrait accepter le caractère '.' à condition qu'il ne soit pas suivi d'un autre caractère '.', mais ça doit pas marcher tout à fait comme ça...

  11. #11
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Loceka
    En fait le var dot = "(\.(?!\.))"; n'était pas bien interprété, je comprends pas pourquoi.
    Ce ne serait pas dû à la position du "?" qui créerait une confusion avec "?:" ?
    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

  12. #12
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if(!/^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+$/i.test( $('#custmail').val()))
    avec jquery, mais la reg reste la même et elle me convient niveau filtrage
    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 !

  13. #13
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Non, mais j'avais pas testé la regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function envoyer(formulaire){	
    	var word = "[a-zA-Z0-9!#$%&'*\/=?^_`{|}~+-]";
    	var dot = "(\.[^.])";
    	var subPart = word+"("+word+"|"+dot+")+";
     
    	if (formulaire.usermail.value.search("^"+subPart+"@"+subPart+"$") == -1) {
    		alert('Veuillez indiquer une adresse e-mail suivant le format "Utilisateur@Domain",\n'+'par ex. : "bob.dupont@fai.fr"');
    		return(false);
    	}
    	formulaire.submit();
    }
    En fait le var dot = "(\.(?!\.))"; n'était pas bien interprété, je comprends pas pourquoi.
    Normalement il devrait accepter le caractère '.' à condition qu'il ne soit pas suivi d'un autre caractère '.', mais ça doit pas marcher tout à fait comme ça...
    j'ai testé ton code, mais comme je te disaiscela accepte egalement les personnes qui mettent par exemple un ";" ou ":" dans l'adresse mail.
    Et donc c pas bon

  14. #14
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Ce ne serait pas dû à la position du "?" qui créerait une confusion avec "?:" ?
    J'avoue que je sais pas trop, en Java la doc dit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?!X)	X, via zero-width negative lookahead
    Et j'avais vu SpaceFrog utiliser cette notation (ou une notation similaire) dans un post récent en javascript (que je n'arrive plus à retrouver...).
    Je n'ai jamais utilisé cette syntaxe personnellement mais elle semblait convenir à la situation.

    @spawns :
    En effet
    En remplaçant la variable dot par le code suivant ça semble marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var dot = "([\.][^\.])";
    J'avoue ne plus rien comprendre.

  15. #15
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    pas besoin d'echapper dans une classe ...
    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 !

  16. #16
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    pas besoin d'echapper dans une classe ...
    c'est bon, c'est juste cela qui ne fonctionné pas .
    Merci à tous pour votre collaboration

    @+

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

Discussions similaires

  1. Mettre des adresse email d'un formulaire à une feuille excel
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2008, 11h22
  2. Fonction verification nom domaine adresse email
    Par claralavraie dans le forum SQL
    Réponses: 7
    Dernier message: 10/01/2008, 16h16
  3. verification adresse email
    Par philippe123 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/03/2007, 12h13
  4. Réponses: 5
    Dernier message: 05/07/2006, 18h54
  5. Réponses: 3
    Dernier message: 02/05/2006, 10h49

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