Java Program - Email address verification using Strings and RegEx
If you insist on using regex you can use this but without validating properly you could be in for all kinds of trouble
static Pattern emailPattern = Pattern.compile("[a-zA-Z0-9[!#$%&'()*+,/\-_\.\"]]+@[a-zA-Z0-9[!#$%&'()*+,/\-_\"]]+\.[a-zA-Z0-9[!#$%&'()*+,/\-_\"\.]]+");
public static boolean isValidEmail(String email) {
Matcher m = emailPattern.matcher(email); return !m.matches();
}
Or alternatively you could use
public static boolean isValidEmailAddress(String email) {
boolean result = true;
try {
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
} catch (AddressException ex) {
result = false;
}
return result;
}
Which is a core java utility which would be better...
Note that neither of these will guarentee an address is actually valid, just that it is correctly formed and so hypothetically could exist
String email_regex = "[A-Z]+[a-zA-Z_]+@\b([a-zA-Z]+.){2}\b?.[a-zA-Z]+";
String testString = "[email protected]";
Boolean b = testString.matches(email_regex);
System.out.println("String: " + testString + " :Valid = " + b);
will check for the last three constraints which you can then combine with
string.length()>3 && string.length()<20
user2377778
Updated on May 14, 2020Comments
-
user2377778 almost 4 years
The problem statement goes like this:
We need to create a String data type called emailId
The email ID has to be set using appropriate setter methods.
The validation rules for the email ID check have to be implemented in the main().
Conditions are:
Overall length of the email ID must be >3 and <20.
The emailId must include "@" followed by a minimum of 1 and maximum of 2 "." characters.
The substring before "@" must contain a combination of Upper Case, Lower Case and "_"(underscore) symbols.
The first letter of the email Id must be in Upper Case.
If all the above conditions are valid, it should display "Email ID is valid" or else, it should display an appropriate error message
This is my code:
public class EmailCheck { String emailId; public void setEmailId(String emailId){ this.emailId=emailId; } public String getEmailId(){ return emailId; } public static void main(String[] args) { EmailCheck em = new EmailCheck(); em.setEmailId("[email protected]"); String email = em.getEmailId(); int length = email.length(); boolean flag1 = false; boolean flag2 = false; boolean flag3 = false; boolean flag4 = false; boolean flag5 = false; boolean flag6 = false; boolean flag7 = false; int count = 0; //Condition 1 if((length>3 && length<20)== true) flag1 = true; else flag1 = false; //Condition 2 int temp = email.length(); if(email.contains("@")){ flag2=true; int a=email.indexOf("@"); for(int i=a;i<temp;i++){ if(email.charAt(i)=='.'){ flag3=true; count=count+1; } } if(count<1||count>2){ flag4=false; } else{ flag4=true; } } else{ flag2 =false; System.out.println("No @ symbol present"); } //Condition 3 if(email.matches("[A-Z a-z _]+@.*")) //Unable to get the right RegEx here! flag5 = true; else flag5 = false; //Condition4 if(Character.isUpperCase(email.charAt(0))==true) flag6 = true; else flag6=false; if(flag1==true && flag2==true && flag3==true && flag4==true && flag5==true &&flag6==true) System.out.println("Email ID is valid"); else{ if(flag1==false) System.out.println("Inavlid length of Email ID"); if(flag2==false||flag3==false||flag4==false) System.out.println("Invalid Position of Special Characters"); if(flag5==false) System.out.println("Invalid combination for username"); if(flag6==false) System.out.println("Invalid case of first letter"); } } }
I'm not sure of the condition #2(the logic?) and condition #3(the RegExp part). A few of the test cases seem correct, the rest of them are wrong(owing to faulty logic in #2 and esp #3, I think.)
Please, tell me what changes have to be done here to get the right output. Thanks!
-
SLaks almost 11 yearsEvery one of your validation rules is wrong. Don't do this.
-
Maroun almost 11 yearsSide note:
if((length>3 && length<20)== true)
should beif(length>3 && length<20)
-
user2377778 almost 11 years@Slaks Can you please suggest what I should improve on?
-
Kyle almost 11 yearsWrong is subjective. That could be right under certain circumstances. Sounds like class work though
-
SLaks almost 11 yearsGet rid of them all. The rules for valid email addresses are extremely complicated; you should use commons.apache.org/proper/commons-validator/apidocs/org/apache/…
-
Brian Roach almost 11 years
-
SLaks almost 11 years@Kyle: I can't think of any sane circumstances in which any of the rules would be right.
-
user2377778 almost 11 years@SLaks :( Oh! I will look into it. I'm just a beginner at Java, coding this for a java 101 class, so we've been provided with a few rules to get the grip of programming, that's all.
-
user2377778 almost 11 years@Kyle : Yes, this is classwork. Basics of Java Programming.
-
aran almost 11 yearsthis code is so wrong my JVM is crying
-
Kyle almost 11 years[A-Z][a-zA-Z_]*(?<=_)(?<=[A-Z])(?<=[a-z])@.{1,2}(?<=.{4,19}) ill throw out a one liner.
-
user2377778 almost 11 years@Kyle All the 4 conditions need not be in the same reg-expression. Just the RegExp for Condition #3 would suffice.
-
user2377778 almost 11 yearsThank you so much @thegrinner
-
Joseph about 8 yearsMaybe you could update your answer with the last example from here howtodoinjava.com/regex/java-regex-validate-email-address otherwise good explanation you gave there.