Arobase et . dans email java

Babs -  
 danimo -
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. danimo
     
    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
  2. sandul Messages postés 4013 Statut Membre 723
     
    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
  3. danimo
     
    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
  4. Babs
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Babs
     
    J'ai beau tout essayer les [], les () mais ça ne marche pas ...^^
    -1
  7. danimo
     
    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
  8. Babs
     
    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
  9. sandul Messages postés 4013 Statut Membre 723
     
    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
  10. Babs
     
    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. danimo
       
      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