Arobase et . dans email java

Fermé
Babs - 28 sept. 2010 à 08:32
 Utilisateur anonyme - 1 oct. 2010 à 16:11
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
A voir également:

9 réponses

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
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
28 sept. 2010 à 11:18
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
Utilisateur anonyme
28 sept. 2010 à 13:19
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai beau tout essayer les [], les () mais ça ne marche pas ...^^
-1
Utilisateur anonyme
29 sept. 2010 à 00:04
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
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
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
29 sept. 2010 à 09:33
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
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
Utilisateur anonyme
1 oct. 2010 à 16:11
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