Arobase et . dans email java

Bonjour,

Voila, je voudrais vérifier qu'il y a bien un @ et un . après dans un email mais ma fonction ne marche pas.

Voici le code :

    public static boolean ArobasePoint(String adresse) 
    {
        boolean booleen;
        
        //Restriction a avoir dans l'adresse a saisir
        Pattern mot = Pattern.compile("@+\\.");
        //On regarde si l'adresse saisie correspond aux restrictions
        Matcher mail = mot.matcher(adresse);
        
        //Si conditions respectés alors on affiche que c'est bon autrement il y a une erreur
        if (mail.find()) 
        {
              booleen = true;
        }    
        else 
        {        
              booleen = false;
        }
        return booleen;
    }


Merci d'avance

9 réponses

  1. Re,

    Avec la 1ère version de ton code, tu peux tester ce motif:

    String motif = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$";
    Ce qui permet d'effectuer les contrôles suivants:

    - L'adresse doit commencer par des lettres quelconques (en minuscule ou majuscule),
    n'importe quel chiffre, et les caractères "-" ou "_".
    (mais combinées n'importe comment **)

    - après l'arobase, le même contrôle mais sans "_"
    et il faut impérativement au moins 2 caractères entre l'arobase et le point (**).

    - aprés le point, il doit y avoir 2 ou 3 lettres majuscules ou miniscules.

    Le contrôle de l'@ et du point est bon...

    C'est loin d'être complet mais c'est un bon début...

    Cordialement,

    Dan
    1
    1. Ce que je demande et clair et net.
      Je veux vérifier d'abords qu'il y a bien que un @ dans la phrase puis dans un second temps vérifier qu'il y a que un . derrière l'@.

      La doc que vous avez donné ne m'aide en autant cas à faire cela...
      -1
      1. je re poste une réponse de 30/09/2010 qui s'est affichée plus haut et que tu n'as sans doute pas vue:

        Re,

        Avec la 1ère version de ton code, tu peux tester ce motif:

        String motif = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$";
        Ce qui permet d'effectuer les contrôles suivants:

        - L'adresse doit commencer par des lettres quelconques (en minuscule ou majuscule),
        n'importe quel chiffre, et les caractères "-" ou "_".
        (mais combinées n'importe comment **)

        - après l'arobase, le même contrôle mais sans "_"
        et il faut impérativement au moins 2 caractères entre l'arobase et le point (**).

        - aprés le point, il doit y avoir 2 ou 3 lettres majuscules ou miniscules.

        Le contrôle de l'@ et du point est bon...

        C'est loin d'être complet mais c'est un bon début...

        Cordialement,

        Dan
        0
    2. Re,

      Il te faut une regex plus complexe si tu veux contrôler correctement une adresse e-mail, car il y a plein de RFC qui décrivent le format d'une adresse valide. Ce n'est pas évident dans un premier temps, mais les vérifications à faire sont nombreuses.

      Je t'ai déjà répondu à ce sujet ici https://forums.commentcamarche.net/forum/affich-19236440-adresse-mail-en-java#p19266114 ... Prends la peine de lire avec attention les liens en évitant de dire "mais ça ne marche pas" dans les premières 5 minutes d'essai :-P En particulier, tu as une classe fonctionnelle complète fournie par Les Hazlewood (il ne te reste qu'à faire du copier coller). Plus simple que ça...

      ++
      -1
      1. Cela marche mais mtn je voudrais dabords gérer les @ voir si y en a qu'une sinon mettre un message d'erreur et seulement après vérifier si y a que un point autrement pareil mettre un message d'erreur.

        Voila je sais que je suis chiant mais je veux que cela soit propre merci

        Voici mon code pour l'@ :
        //Restriction a avoir dans l'adresse a saisir
                Pattern mot = Pattern.compile("[@{1}]");
                //On regarde si l'adresse saisie correspond aux restrictions
                Matcher mail = mot.matcher(adresse);


        Mais ça me met que c'est bon alors que quand je rentre 2 @ ça me met qu'elle est valide aussi alors que c'est censé etre mauvais..

        Merci d'avance
        -1
        1. Re,

          public static boolean arobasePoint(String adresse)
                {
                //boolean booleen; //déclarer au niveau classe >> private static boolean booleen
                   String motif = "[@{1}[\\.{1}]]"; //@ doit exister exactement 1 fois, le . aussi
                                                    // mais sont-ils au bon endroit ?
                   
                   Pattern pattern = Pattern.compile(motif);
                   Matcher matcher = pattern.matcher(adresse);
                   int nbreFois = 0;
                   while(matcher.find())
                   {
                      nbreFois++;
                   }
                   if( (nbreFois == 2) && (adresse.indexOf('.')>adresse.indexOf('@')) ) // merci sandul
                   {
                      booleen = true;
                   }
                   else
                   {
                      booleen = false;
                   }
                   return booleen; 
                }
          


          Appel de la méthode:

          String mail = "untel@msn.com";
                   
                   arobasePoint(mail);
                   
                   if(booleen)
                      System.out.println("@ et . existent chacun une fois dans " + mail + " et dans le bon ordre !!!");
                   else
                      System.out.println("Pb @ et/ou .");


          Dan
          -1
          1. J'ai beau tout essayer les [], les () mais ça ne marche pas ...^^
            -1
            1. Merci mais la restriction concernant l'@ et le . ne marche pas :s!
              Autrement c'est nikl :d

              Merci de prendre le temps de me répondre
              -1
              1. Salut,

                Si c'est une obligation d'utiliser Regex tu peux faire:

                String adresse = "untel@msn.com";
                      
                         String motif = "[@{1}[\\.{1}]]"; //@ doit exister exactement 1 fois, le . aussi
                                                          // mais sont-ils au bon endroit ?
                         
                         Pattern pattern = Pattern.compile(motif);
                         Matcher matcher = pattern.matcher(adresse);
                         int nbreFois = 0;
                         while(matcher.find())
                         {
                            nbreFois++;
                         }
                         System.out.println("nbreFois = " + nbreFois);
                         if(nbreFois == 2)
                         {
                            if(adresse.indexOf('.')>adresse.indexOf('@')) // merci sandul
                               System.out.println("@ et . existent chacun une fois dans " + adresse + " et dans le bon ordre !!!");
                            else
                               System.out.println("@ et . existent chacun une fois dans " + adresse + " mais dans le mauvais ordre !!!");
                         }
                         else
                            System.out.println("Soit @ ou . n'existe pas, ou les deux n'existent pas,\n"
                               + "ou l'un des deux existe plus d'une fois,\n"
                               + "ou les deux existent plus d'une fois dans \"" + adresse + "\"");


                Cordialement,

                Dan
                0
                1. Bonjour,

                  Essaie ceci:

                  public static boolean arobasePoint(String adresse) {
                  	Pattern mot = Pattern.compile("@*\\.");
                  	Matcher mail = mot.matcher(adresse);
                  
                  	return mail.find();
                  }


                  Toutefois, note que:

                  1. Pour la vérification simple que tu souhaites, les regex ne sont pas vraiment nécessaires. Le code se simplifie dans ce cas comme suit (sans perte de fonctionnalité):

                  public static boolean arobasePoint(String adresse) {
                  	return adresse.indexOf('.')>adresse.indexOf('@');
                  }

                  2. Pour vérifier qu'un String est une adresse d'e-mail valide, c'est un chouïa plus compliqué. Le fait de vérifier l'existence d'un point suivant l'éperluette n'est pas suffisant.

                  ++
                  0