【问题标题】:Android - Email validation [duplicate]Android - 电子邮件验证 [重复]
【发布时间】:2013-09-25 10:15:12
【问题描述】:

如何进行电子邮件验证? 我使用以下代码来检查电子邮件的验证。

final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-    Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(string);

上面的代码可以正常工作,但是如果我也输入字符串"example@gmail.com.com", 我得到的回复是true。

我需要验证这一点。我怎样才能验证这一点?请帮帮我。

【问题讨论】:

标签: android regex


【解决方案1】:

使用这段代码 将电子邮件传递给此函数,它将返回 true 或 false 的布尔值

  private boolean validEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}


  if (!validEmail(email)) {
     Toast.makeText(YourActivity.this,"Enter valid e-mail!",Toast.LENGTH_LONG).show();

}

【讨论】:

    【解决方案2】:

    你不需要定义任何 reg,因为 android 本身提供检查电子邮件的功能是有效的不是 TextUtils.isEmpty(edtEmail.getText().toString().trim())

    第二种方法是:

    public static boolean isEmailValid(String email) {
    
            String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
                    + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
                    + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
                    + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
                    + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
                    + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
            CharSequence inputStr = email;
            Pattern pattern = Pattern.compile(regExpn, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(inputStr);
            if (matcher.matches())
                return true;
            else
                return false;
        }
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      使用以下类:

      public class RequiredFieldValidator implements Validator {
      
          /** The objects. */
          List<EditText> objects;
      
          /** The Constant EMAIL_ADDRESS_PATTERN. */
          private final static Pattern EMAIL_ADDRESS_PATTERN = Pattern
                  .compile("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + "\\@"
                          + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + "(" + "\\."
                          + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+");
      
          /**
           * Check email.
           *
           * @param email the email
           * @return true, if successful
           */
          public static boolean checkEmail(String email) {
              return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
          }
      
          /**
           * Instantiates a new required field validator.
           *
           * @param objects the objects
           */
          public RequiredFieldValidator(List<EditText> objects) {
              this.objects = objects;
          }
      
          /* (non-Javadoc)
           * @see com.gangaz.mobi.supermarket.helper.Validator#setFailureMessage(java.lang.String)
           */
          @Override
          public void setFailureMessage(String message) {
              // TODO Auto-generated method stub
      
          }
      
          /* (non-Javadoc)
           * @see com.gangaz.mobi.supermarket.helper.Validator#setType(int)
           */
          @Override
          public void setType(int type) {
              // TODO Auto-generated method stub
      
          }
      
          /* (non-Javadoc)
           * @see com.gangaz.mobi.supermarket.helper.Validator#validate()
           */
          @Override
          public boolean validate() {
              boolean valid = false;
              for (EditText obj : objects) {
      
                  if (obj.getText().toString().trim().length() == 0) {
                      valid = false;
                      break;
                  }
      
              }
              return valid;
          }
      }
      

      然后在你的活动中这样做:

      if (email.length() != 0 && 
        RequiredFieldValidator.checkEmail(email.trim()) != true) {
      
                      //show toast for invalid email
      
                      }
      

      【讨论】:

        【解决方案4】:

        初始化模式如下

        public final Pattern EMAIL_ADDRESS_PATTERN = Pattern
                    .compile("[a-zA-Z0-9+._%-+]{1,256}" + "@"
                            + "[a-zA-Z0-9][a-zA-Z0-9-]{0,64}" + "(" + "."
                            + "[a-zA-Z0-9][a-zA-Z0-9-]{0,25}" + ")+");
        

        将以下函数复制到您的活动中

        private boolean checkEmail(String email1) {
                return EMAIL_ADDRESS_PATTERN.matcher(email1).matches();
            }
        

        并使用电子邮件编辑文本字符串调用此函数。 该函数将结果写入 TRUE 或 FALSE

        【讨论】:

        • 感谢您的信息。它不验证输入为“example@gmail.com.com”
        • 这里你使用的是 2 .com 那么这是错误的,所以我的函数将 false 作为输出......我认为这是 write..
        【解决方案5】:

        用途:

          public boolean validateEmail(String strEmail) {
                    Matcher matcher;
                    String EMAIL_PATTERN = "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + "\\@"
                            + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + "(" + "\\."
                            + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+";
                    Pattern pattern = Pattern.compile(EMAIL_PATTERN);
                    matcher = pattern.matcher(strEmail);
                    return matcher.matches();
        

        如果返回 true,则电子邮件有效,否则无效。

        【讨论】:

          【解决方案6】:

          下面是我们应该处理的最简单和最好的方法,

          EditText e1 = (EditText)findViewById(R.id.e1); 
          TextView t1 = (TextView)findViewById(R.id.t1); 
          
          String email = e1.getText().toString().trim();
          String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
          
          // Below is the code that goes on your button click
          if (email.matches(emailPattern))
          {
              // Do what you want to, Allow user to next screen
          }
          else 
          {
              // Show error Message
          }
          

          【讨论】:

          【解决方案7】:

          尝试:

          String emailPattern = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
          

          【讨论】:

          • 您应该添加一些上下文来说明此答案为何有效。否则,它会非常短且容易被删除。
          • 这行不通。如果我们可以向它发送邮件,则电子邮件是有效的。即使space,*,% 和许多其他字符在电子邮件 ID 中也是有效的
          • 我没有添加上下文,因为在她的代码中只有一个 email_pattern
          【解决方案8】:

          试试这个...

          public static boolean validateEmail(String email)
          {
              boolean isValid = false;
          
              String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
              CharSequence inputStr = email;
          
              Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
              Matcher matcher = pattern.matcher(inputStr);
              if(matcher.matches()) 
              {
                  isValid = true;
              }
          
              return isValid;
          }
          

          【讨论】:

          • 这已经在一些网站上传播过,但很糟糕,因为它不允许超过 4 个字符的 TLD!
          【解决方案9】:

          试试这个

             private boolean validEmail(String email) 
             {
               // TODO Auto-generated method stub
               String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
               String emailPatternnew = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+\\.+[a-z]+";
               String domain = email.substring(email.indexOf('@'), email.length());
               String last = domain.substring(domain.indexOf('.'),domain.length());
               if (email.matches(emailPattern) && (last.length() ==3 || last.length() == 4)) // check @domain.nl or @domain.com or @domain.org
              {      
                  return true;
              }
              else if(email.matches(emailPatternnew) && last.length() == 6 && email.charAt(email.length()-3)== '.') //check for @domain.co.in or @domain.co.uk
              {
                  return true;
              }
              else
              {
                  return false;
              }
          }
          

          【讨论】:

          • 这行不通。如果我们可以向它发送邮件,则电子邮件是有效的。即使space,*,% 和许多其他字符在电子邮件 ID 中也是有效的
          猜你喜欢
          • 2013-01-18
          • 2012-03-10
          • 2011-07-16
          • 2011-06-21
          • 2012-05-20
          • 2013-02-12
          • 2011-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多