Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 18h15   #1
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
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 :
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
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 20h37   #2
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
Le mieux est de faire toutes les vérifications en une seule fois :
Code :
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
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 21h55   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
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
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 22h06   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 22h44   #5
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
Citation:
Envoyé par Loceka Voir le message
Le mieux est de faire toutes les vérifications en une seule fois :
Code :
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 :
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 ???
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 23h05   #6
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
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...
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 23h13   #7
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
le but étant ici simplement une vérification lors de l'inscription.
cela envoie ensuite un mail à l'inscrit.
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 23h51   #8
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
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 :
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)
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 07h04   #9
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
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.
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 08h34   #10
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
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 :
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...
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 09h09   #11
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 09h09   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Code :
  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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 09h40   #13
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
Citation:
Envoyé par Loceka Voir le message
Non, mais j'avais pas testé la regex

Code :
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
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h40   #14
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
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 :
(?!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 :
var dot = "([\.][^\.])";
J'avoue ne plus rien comprendre.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h43   #15
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
pas besoin d'echapper dans une classe ...
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/02/2011, 11h29   #16
Membre du Club
 
Avatar de spawns
 
Homme
Inscription : juillet 2004
Messages : 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations forums :
Inscription : juillet 2004
Messages : 257
Points : 60
Points : 60
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

@+
spawns est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h00.


 
 
 
 
Partenaires

Hébergement Web