[javascript] Switch case

benschumi -  
avion-f16 Messages postés 20367 Statut Contributeur -
Bonjour,

j'ai un petit soucis, j'ai un formulaire que je vérifie avec javascript et pour l'email,
il y a plein de condition mais je n'arrive pas a le faire fonctionner.
Le problème viens de ce qu'il y a après le swith ou après les cases mais j'ai du mal là..

// verifie l'email
	mail = document.form1.email.value 

	switch (mail) {
	case mail == "" :
	alert ('Vous avez oublié de saisir le prénom!');
    return false;
    break;
	
	case strspn(mail, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@.-") < strlen(mail):
	alert ('caractères non conformes');
	return false;
    break;

	case substr_count(mail, '@') == 0 || substr_count(mail, '@') != 1 :
	alert ('@ doit être présent et seulement une fois');
	return false;
	break;
	
	case((strpos(mail, "@")) == "0"):
	return"@ ne peut être en début d'eMail";
	break;
	
	case(strpos(mail, "@")  == (strlen(mail) - "1")):
	alert ('@ ne peut être en fin d\'eMail');
	return false;
	break;
	
	case(strlen(mail) < "6"):
	alert ('l\'email doit faire plus de 6 caractères');
	return false;
	break;
	
	case(strlen(mail) > "50"):
	alert ('l\'email doit faire moins de 50 caractères');
	return false;
	break;
	
	case(strspn(mail["0"], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") == "0"): 
	alert('le premier caractère de l\'eMail doit être une lettre');
	return false;
	break;
	
	case(strspn(mail[strlen(mail)-"1"], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") == "0"):
	alert('le dernier caractère de l\'eMail doit être une lettre');
	return false;
	break;
	
	case(strpos(mail, "@.") != ""): 
	alert ('il ne doit pas y avoir de \'@.\' dans un eMail');
	return false;
	break;
	
	case(strpos(mail, "..") != ""):
	alert ('il ne doit pas y avoir de \'..\' dans un eMail');
	return false;
	break;
	
	//si le point est à trois lettre ou quatre de la fin, tout est bon
	case(mail[strlen(mail) - "3"] == "." || mail[strlen(mail) - "4"] == "."):
	return true;
	break;
	
	default:
	alert ('il doit y avoir 2 ou 3 lettres après le dernier point');
	return false;
	break;
	}


Je réfléchis mais j'ai du mal, ça fait longtemp que j'ai pas utiliser les switch.

Merci de votre aide
A voir également:

13 réponses

max2aa Messages postés 91 Statut Membre
 
je sais pas, j ai pas trouvé
0
benschumi
 
Merci quand même mais ta réponse n'est pas très constructive je trouve. ^^
0
Alain_42 Messages postés 5413 Statut Membre 894
 
je te propose une solution plus simple:

// verifie l'email
	mail = document.form1.email.value ;
	//il manquait le ; ci dessus
	if(mail ==""){
		alert("veuillez saisir l'adresse email ");
		return false;
	}
	var exp=new RegExp("^[\\w\\-]+(\\.[\\w\\-]+)*@[\\w\\-]+(\\.[\\w\\-]+)*\\.[\\w\\-]{2,}$", "i");
	if(mail !="" && !exp.test(mail)){
		alert("Adresse email non valide ");
		return false;
	}
0
benschumi
 
c'est vrai qu'il manquait le ; mais ça marche sans.
Le problème ne vient pas de là.
Merci pour ton aide mais je préfère garder mon script, il y a plus de vérficiation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 20367 Statut Contributeur 4 509
 
Prends le script d'Alain, il est plus clair (quand on comprent les regex), plus court et fonctionnel.
Les vérifications sont les mêmes, ton script n'en fait pas plus (plus long ne rime pas toujours avec meilleur, mais souvent avec moins bonne optimisation)
0
benschumi
 
C'est vrai qu'il est bien optimisé mais malheureusement il ne vérifie pas ça.
Et c'est essentielle.

if (strlen(mail) < 6) {
alert ('l\'email doit faire plus de 6 caractères');
return false; }

if(strpos(mail, '@') == 32) {
alert ('l\'email doit faire moins de 30 caractères');
return false; }

//si le point est à trois lettre ou quatre de la fin, tout est bon
if (mail[strlen(mail) - "3"] == "." || mail[strlen(mail) - "4"] == ".") {
return true; }
0
avion-f16 Messages postés 20367 Statut Contributeur 4 509
 
Si, elle les fait, mais sous forme de regex.
0
benschumi
 
Ba non j'ai essayer en entrant directement sur mon site, ça les fait pas.
Et au moins j'ai un message détaillé pour chaque erreurs.
Mais c'est vrai que RegExp c'est cool, après avoir passer 10 minutes a comprendre comment il marche. ^^
0
Alain_42 Messages postés 5413 Statut Membre 894
 
if (strlen(mail) < 6)
strpos(mail, '@') == 32


où as tu trouvé ces normes ?

//si le point est à trois lettre ou quatre de la fin, tout est bon

donc tous les .fr .be etc... ne sont pas bons ?
0
benschumi
 
unexemple@hotmail.fr
Le point est le 3eme caractère en partant de la fin
unexemple@hotmail.com
Le point est le 4eme caractère en partant de la fin
0
benschumi
 
je me suis trompé, c'est pas
strpos(mail, '@') == 32
mais
strpos(mail, '@') >= 32

Essaye de créer n'importe qu'elle boite mail avec moins de 6 ou plus de 30 caractères avant le @ et regardes le message d'erreur.

Nom de connexion demandé:
Exemples : JSentier, Julien.Sentier


Votre nom d'utilisateur doit comprendre entre 6 et 30 caractères.

vcsqqqqqqqqqqqqqqqqqqqqqqqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvcxvbbbbbbbbbbbbbbdfg@gmail.com
0
benschumi
 
Désolé pour le
//si le point est à trois lettre ou quatre de la fin, tout est bon
je me suis mal exprimé mais ce message (à la base n'est lu que par moi) est pour me repérer, je l'ai mal écrit c'est vrai
//si le point est à trois caractères ou quatre de la fin, tout est bon
Là c'est mieux
0
avion-f16 Messages postés 20367 Statut Contributeur 4 509
 
Mais ça ne change rien.
Car il y a les extensions à :
- 2 lettres : .fr, .be, .ca, .ch, ...
- 3 lettres : .com, .net, .org, .gov, .edu, ...
- 4 lettres : .info, .name, ...
0