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. 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
    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. 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. J'ai beau tout essayer les [], les () mais ça ne marche pas ...^^
          -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. 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,

                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. 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,

                  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