【问题标题】:Email Validation Using Loops [duplicate]使用循环的电子邮件验证 [重复]
【发布时间】:2014-07-29 05:51:11
【问题描述】:

我有一个关于使用 Java 进行电子邮件验证的问题。我知道使用它的正确方法是通过正则表达式和模式,但由于某种原因,我被要求使用循环来编写它。换句话说,我必须使用 for 循环来验证电子邮件。用模式很容易达到要求,但说到循环,就有点混乱了。

电子邮件必须在@ 之前至少有一个字母,在@ 和点. 之间至少有一个字母。点后至少有两个字母。

我的意思是如何编写一个使用 for 循环检查所有这些要求的循环? 有什么想法吗?


今天早些时候我问过上面的问题......现在我到了这里。现在唯一的问题是我不能在点后放置至少两个字符。

public class EmailValid {
    public static void main (String[] args) {
        System.out.print("Please Enter Your Email To Validate: ");
        Scanner input = new Scanner (System.in);
        String email  = input.nextLine();
        for (int i = 0 ;  i < email.length(); i ++) {
            if (email.indexOf("@") >= 1 ) {
                if (email.indexOf(".") >= email.indexOf("@")+2)
                    if ((email.indexOf("@")+email.indexOf(".") - email.length()) >= 1 )
                        System.out.print("Email Passed" + (email.length() - (email.indexOf("@")+email.indexOf("."))));
            }
        }
        System.out.print("\n String legnth: "+ (email.length()) + 
                "\n Index of @: " + email.indexOf("@") +
                "\n Index of dot: " + email.indexOf("."));
    }
}

【问题讨论】:

  • 你的问题是什么(“任何想法?”有点太模糊了)?
  • 你刚刚用你的最后一句话描述了它。如果您想获得一些帮助,最好展示您的最佳尝试(代码).. 或者至少到目前为止您尝试了什么..
  • 对不起,我的错。我的意思是如何编写一个循环来使用 for 循环检查所有这些要求?
  • 可能会遍历电子邮件String 并在遇到“@”和“.”时注意?
  • 如果您的问题改变了您的要求,请不要编辑。

标签: java email-validation


【解决方案1】:

最好还是坚持自己采用的方法。您应该使用 for 循环遍历整个字符串。我认为代码必须是这样的:-

public class EmailValid {
 public static void main (String[] args) {
 System.out.print("Please Enter Your Email To Validate: ");
 Scanner input = new Scanner (System.in);
 String email  = input.nextLine();
 boolean flag=false;
 int countr=0,countd=0;
 loop:for (int i=0; i < email.length();i++) {                 //Better to iterate loop till end of the String "email"
 if(email.charAt(i)=='@'){
  countr++;
  if(countr>1){
   flag=false;
   break loop;
  }
   if(i>=1) 
   flag=true;
   else{
   flag=false;
   break loop;
    }
  }
 if(email.charAt(i)=='.'){
  countd++;
  if(countd>1){
      flag=false;
      break loop;}
   if(i>=3)
 flag=true;
 else{
   flag=false;
   break loop;}
if(email.length()>=i+3)
  flag=true;
 else{
  flag=false;
  break loop;}
 }
 if((email.indexOf(".")-email.indexOf("@"))>=2)
{
  flag=true;}
 else {
  flag=false;
  break loop;}
if(((int)email.charAt(i))>=65 && ((int)email.charAt(i))<=90)
 flag=true;
 else if(((int)email.charAt(i))>=97 && ((int)email.charAt(i))<=122)
 flag=true;
 else if(((int)email.charAt(i))>=48 && ((int)email.charAt(i))<=57)
 flag=true;
 else if(((int)email.charAt(i))==64 || ((int)email.charAt(i))==46)
 flag=true;
 else
 flag=false;
 //@ must at least have a char before itself and also there must be a character between '@' and '.'--So mininmum index of '@' >=1 and for '.' >=3.
 if(flag==false)
break loop;
 }
 if(flag==true && email.length()>=5)    // The minimum length of the String must be equal to minimum index of '.' +2, i.e., >=5. 
  System.out.println("Validated");
  else 
  System.out.println("Invalid Email");
   }
  }

【讨论】:

  • 如果我对你的代码有信心,那么 +=+=+=.+=+=@78 应该是一个有效的地址?!!!
  • 你仍然没有验证 '.' “@”之后出现。恕我直言,您应该使用状态枚举(begin、after_arobas、after_dot),它会更干净、更容易理解。但是很好的尝试...
  • @Whizz-问题是因为在变为假后没有中断选项选项!对不起。请立即尝试!
  • @shekharsuman 这就是现在的方式它在各个方面都像真正的“电子邮件”一样完整!,远非如此! [RFC5322](tools.ietf.org/html/rfc5322)。
  • 如果这花了 45 分钟才弄错了,你应该重新考虑你的职业!
猜你喜欢
  • 2011-07-16
  • 2017-06-29
  • 2011-06-21
  • 2013-09-25
  • 2012-05-20
  • 2013-01-18
  • 2013-02-12
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多