【问题标题】:Validating username part of email address验证电子邮件地址的用户名部分
【发布时间】:2013-05-13 11:19:58
【问题描述】:

考虑在 main 方法的 starter 类中提供的电子邮件 ID。

String emailId = "Hellooo_hell@gmail.com";

问题描述:

  1. emailId 的总长度应该是 >3 和

  2. emailId 必须包含“@”,后跟最少 1 个,最多 2 个“。”字符。

  3. “@”之前的子字符串必须包含大写、小写和“_”(下划线)符号的组合。
  4. emailId 的第一个字母必须大写。

如果上述所有条件都有效,则必须显示成功消息或应显示适当的错误消息。

这是无法按我想要的方式工作的代码。

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("Hell_ooo@gmail.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;
    int count2 = 0;

    //Condition 1
    if((length>3 && length<20)== true)
        flag1 = true;
    else 
        flag1 = false;

    //Condition 2
    for(int i=0;i<length;i++){
        if(email.charAt(i)=='@'){
            flag2 = true;
            for(int j=i+1;j<length;j++){
                if(email.charAt(j)=='.')
                  {
                   flag3 = true;    
                   count=++count;
                  }
                else
                    flag3 = false;
            }
            if(count<1 || count>2)
             {   
                 flag4 = false;
                 //System.out.println("Invalid position of special characters");

             }
            else
                flag4 = true;

        }
        else
            flag2 = false;
    }

    //Condition 3
    if(email.matches("[a-zA-Z_]+@.*")) 
        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");
    }


}
}

【问题讨论】:

  • 我强烈建议你研究一下正则表达式
  • 您为什么要这样做?电子邮件 ID 不区分大小写:Hellooo_hellhELlOoO_HElL 是用于发送电子邮件的相同用户 ID。下划线也不是用户名中的强制字符。你真正想做什么?您真的在验证电子邮件地址吗?如果是,那么您的方法是错误的。如果不是,请描述您的问题。
  • 下次请使用有意义的标题。 “Java 方法和字符串”没有说明您的问题。
  • 编辑了问题描述并添加了代码。请仔细查看。

标签: java


【解决方案1】:

您可以使用String 类中的matches 方法

if(emailId.matches("[a-zA-Z_]+@.*")) {
    // ok matches;
} else {
    // does not match
}

【讨论】:

  • 这不会强制组合大写、小写下划线字符。
  • greg@greg.com 匹配,但不包含大写字母,也不包含下划线。请参阅问题部分中的Aleks G 评论。
  • @GregKopff 是的,当然是对的,好吧,我想这不是 OP 的意图,但在他澄清他真正需要这个代码/正则表达式之前,我会避免猜测 :)
  • 编辑了问题描述并添加了代码。请仔细查看。
猜你喜欢
  • 1970-01-01
  • 2013-11-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2014-03-19
  • 2018-03-13
  • 2011-09-02
相关资源
最近更新 更多