0

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:

  1. Overall length of the email ID must be >3 and <20.

  2. The emailId must include "@" followed by a minimum of 1 and maximum of 2 "." characters.

  3. The substring before "@" must contain a combination of Upper Case, Lower Case and "_"(underscore) symbols.

  4. 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("CFDV@gm.a.il.com");
    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!

4

2 回答 2

4

如果您坚持使用正则表达式,您可以使用它,但如果没有正确验证,您可能会遇到各种麻烦

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();

}

或者你也可以使用

public static boolean isValidEmailAddress(String email) {
   boolean result = true;
   try {
      InternetAddress emailAddr = new InternetAddress(email);
      emailAddr.validate();
   } catch (AddressException ex) {
      result = false;
   }
   return result;
}

哪个是核心java实用程序会更好......

请注意,这些都不能保证地址实际上是有效的,只是它的格式正确,因此假设可能存在

String email_regex = "[A-Z]+[a-zA-Z_]+@\b([a-zA-Z]+.){2}\b?.[a-zA-Z]+";
String testString = "Im_an_email@email.co.uk";
Boolean b = testString.matches(email_regex);
System.out.println("String: " + testString + " :Valid = " + b);

将检查最后三个约束,然后您可以将其结合

string.length()>3 && string.length()<20
于 2013-05-13T14:41:23.413 回答
0

电子邮件 ID 的总长度必须 >3 且 <20。

你有这部分很好 - 一对长度检查。需要考虑的事项:

  1. 你不需要if (condition == true),只要if (condition)
  2. 如果失败,您可以停止处理电子邮件并仅显示错误。这同样适用于所有其他错误情况。

emailId 必须包含“@”,后跟最少 1 个,最多 2 个“。” 人物。

首先检查@符号并获取索引。一旦你有了它,你就可以拆分字符串。然后,您可以在句点上拆分子字符串并计算它们 - 您需要两个或三个。

可能有一个正则表达式也可以做到这一点。

“@”之前的子字符串必须包含大写、小写和“_”(下划线)符号的组合。

您可以使用这种方法来确保您的正则表达式必须匹配每个部分。就目前而言,我相信如果有大写字母、小写字母下划线,您的正则表达式将起作用,而不是检查所有三个。

电子邮件 ID 的第一个字母必须大写。

与第一部分相同的注释,== true如果失败则丢弃并短路该方法。

于 2013-05-13T14:49:51.613 回答