2011-04-15 1 views
1

J'essaie de trouver une méthode simple pour vérifier si l'entrée d'un utilisateur répond à quelques critères pour une adresse e-mail. J'ai lu beaucoup de discussions sur ce sujet et la plupart semblent vouloir valider l'adresse e-mail aussi. Je n'essaie pas de construire un validateur/vérificateur d'adresse e-mail super duper. J'essaye de construire une méthode qui vérifie ces choses:Non-Confusing Simple Validation de l'email en Java String

  1. La chaîne saisie par l'utilisateur contient le signe '@'.
  2. Il y a au moins deux caractères avant le signe '@'.
  3. Il y a un '.' après le signe at suivi de seulement trois caractères. Le nom de domaine peut être aussi long que nécessaire, mais la chaîne doit se terminer par "._ _ _". Comme dans ".com" ou ".net" ...

Je comprends que ce n'est pas un vérificateur d'adresse e-mail tout compris. Ce n'est pas ce que je veux bien. Je veux juste quelque chose de si simple. Je sais que c'est probablement une question de routine, mais je n'arrive pas à comprendre, même après avoir lu toutes les façons sérieusement dingues de valider une adresse e-mail.

C'est le code que j'ai jusqu'à présent: (Ne vous inquiétez pas, je sais déjà c'est assez pathétique ....)

public static void checkEmail() 
{ 
    validEmail(emailAddresses); 
    if(validEmail(emailAddresses)) 
    { 

    } 
} 

public static boolean validEmail(String email) { 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 
+0

Il est difficile de dire ce qui est simple dans ce cas. Vous avez posté quelques cas (contient @, contient un autre caractère avant/après). Je lisais la spécification et faisais une expression régulière complète pour la valider. – khachik

+0

Juste une note pour la terminologie: Vous ne voulez pas vérifier un e-mail, vous voulez vérifier une * adresse e-mail *. Ce n'est pas pareil. –

+0

Une autre remarque: Il ya des domaines de premier niveau avec plus ('museum',' aero') et avec moins de deux ('de',' us' etc. - tous les domaines de premier niveau de code de pays, en fait) lettres. (Et la plupart de mes adresses e-mail se terminent par '.de'.) –

Répondre

2

Pas parfait, mais fait le travail.

static boolean validEmail(String email) { 
    // editing to make requirements listed 
    // return email.matches("[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}"); 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 

void checkEmails() { 
    for(String email : emailAddresses) { 
     if(validEmail(email)) { 
      // it's a good email - do something good with it 
     } 
     else { 
      // it's a bad email - do something... bad to it? sounds dirty... 
     } 
    } 
} 
+0

Peut-être pourriez-vous ajouter des minuscules aussi? – rocky3000

+0

Je pourrais. Je pourrais ajouter beaucoup de choses. Ce serait aussi facile que de changer chaque 'A-Z' en' A-Za-Z' (et probablement un raccourci je ne sais pas pourrait le faire encore mieux.) Mais, OP voulait simple, et simple il obtient. – corsiKa

+0

@glowcoder Merci pour l'aide. J'essaie de comprendre la partie email.matches du code booléen et je suis un peu confus quant à la façon de l'intégrer dans mon code. J'ai entré le code booléen dans mon code comme une méthode séparée. Maintenant j'essaye d'écrire l'instruction "si". J'ai édité la question originale. – Michael

12

Le paquet javax.mail fournit une classe juste pour ceci: InternetAddress. Utilisez this constructor qui vous permet d'appliquer la conformité RFC822.

+1

Je dois admettre que j'aime mieux ça que le mien. – corsiKa

0
int indexOfAt = email.indexOf('@'); 
// first check : 
if (indexOfAt < 0) { 
    // error 
} 

// second check : 
if (indexOfAt < 2) { 
    // error 
} 

// third check : 
int indexOfLastDot = email.lastIndexOf('.'); 
if (indexOfLastDot < indexOfAt || indexOfLastDot != (email.length() - 4)) { 
    // error 
} 

Lire http://download.oracle.com/javase/6/docs/api/java/lang/String.html pour la documentation des méthodes de cordes.

+0

Cela permet 'test @ foo @ bar.com' qui n'est pas conforme. Il ne s'applique pas non plus aux caractères non autorisés, tels que ', <> \' 'et leurs semblables. – corsiKa