Android - 邮箱验证

6
如何进行电子邮件验证?我已经使用以下代码来检查电子邮件的有效性。
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。 我需要进行验证。如何验证?请帮助我。

这很复杂。请查看http://www.regular-expressions.info/email.html。 - Kuffs
只需使用 android.util.Patterns.EMAIL_ADDRESS.matcher().matches() 进行检查,参见此处 http://stackoverflow.com/a/18909961/2398886 - Tarsem Singh
9个回答

32

使用这段代码,将电子邮件传递给此函数,它将返回一个布尔值,要么为真(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();

}

1
您不需要定义任何正则表达式,因为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;
    }

希望它能对您有所帮助。

0
请使用以下类:
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

                }

0

将模式初始化如下

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

使用电子邮件edittext字符串调用此函数。 该函数将TRUE或FALSE作为结果输出


感谢提供的信息。它无法验证输入为“example@gmail.com.com”。 - Gowri
如果您使用了两个.com,那么就是错误的,因此我的函数会输出false……我认为这样是正确的。 - Dhaval Patel

0

使用:

  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,则电子邮件有效,否则无效。

0
以下是我们应该处理它的最简单和最好的方法,
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
}

你可以从以下链接中了解相关内容: http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/ - User0911

0

试试这个...

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;
}

这在一些网站上被传播,但是不好的是它不允许TLD超过4个字符! - androidguy

0

尝试一下

   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;
    }
}

这行代码行不通...只有当我们可以向电子邮件地址发送邮件时,该地址才是有效的。即使包含空格、星号、百分号和许多其他字符在内的电子邮件地址也是有效的。 - Anirudha

0

尝试使用:

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

你应该添加一些上下文来解释为什么这个答案是正确的。否则,它非常简短且容易被删除。 - user764357
这行代码不起作用。只有当我们能够向电子邮件地址发送邮件时,该地址才是有效的。即使在电子邮件地址中包含空格、星号、百分号和许多其他字符也是有效的。 - Anirudha
我没有添加上下文,因为在她的代码中只有一个电子邮件模式。 - Lele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接