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