[javascript] Switch case

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
Configuration: Windows XP
Firefox 3.5.7

13 réponses

  1. Merci quand même mais ta réponse n'est pas très constructive je trouve. ^^
    0
    1. 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
      1. 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
        1. 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
          1. 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
            1. Si, elle les fait, mais sous forme de regex.
              0
              1. 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
                1. 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
                  1. 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
                    1. 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
                      1. 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
                        1. 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