Как мне подтвердить адрес электронной почты? - PullRequest
305 голосов
/ 30 ноября 2009

Какой хороший метод проверки адреса электронной почты (например, из поля ввода пользователя) в Android? org.apache.commons.validator.routines.EmailValidator , по-видимому, недоступно. Есть ли какие-либо другие библиотеки, которые делают это, которые уже включены в Android, или мне придется использовать RegExp?

Ответы [ 31 ]

1003 голосов
/ 25 октября 2011

Другой вариант - встроенные шаблоны , начиная с уровня API 8:

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

Шаблон видимого источника

OR

Однолинейное решение от @AdamvandenHoven:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
98 голосов
/ 14 марта 2011

Следующий шаблон используется в почте K-9:

public static 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 email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}
69 голосов
/ 09 апреля 2012

Начиная с API 8 (Android 2.2) существует шаблон: android.util.Patterns.EMAIL_ADDRESS http://developer.android.com/reference/android/util/Patterns.html

Таким образом, вы можете использовать его для проверки вашей электронной почты:

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

возвращает true, если адрес электронной почты действителен

UPD: Этот исходный код шаблона:

public static final Pattern EMAIL_ADDRESS
    = 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}" +
        ")+"
    );

см .: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java

Так что вы можете создать его самостоятельно для совместимости с API <8. </p>

47 голосов
/ 30 ноября 2009

Не используйте рег-экс.

Очевидно следующее - это reg-ex, который корректно проверяет большинство адресов электронной почты, которые соответствуют RFC 2822 , (и все равно не работает на таких вещах, как "user@gmail.com.nospam", так как will org.apache.commons.validator.routines.EmailValidator)

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Возможно, самый простой способ проверить электронную почту - просто отправить электронное письмо с подтверждением по указанному адресу, и оно отскочит, тогда оно недействительно.

Если вы хотите выполнить некоторые базовые проверки, вы можете просто проверить, что это в форме *@*

Если у вас есть некоторая валидация, специфичная для бизнес-логики, вы можете выполнить это с помощью регулярного выражения, например, должна быть учетная запись gmail.com или что-то в этом роде.

45 голосов
/ 10 мая 2016

Теперь у нас есть простое средство сравнения шаблонов электронной почты

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
16 голосов
/ 01 октября 2016

Это предложения Android Studio:

public static boolean isEmailValid(String email) {
    return !(email == null || TextUtils.isEmpty(email)) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
12 голосов
/ 31 января 2017

Используйте простой однострочный код для проверки электронной почты

public static boolean isValidEmail(CharSequence target) {
    return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

использовать как ...

if (!isValidEmail(yourEdittext.getText().toString()) {
    Toast.makeText(context, "your email is not valid", 2000).show();
}
11 голосов
/ 24 апреля 2015

использовать android: inputType = "textEmailAddress", как показано ниже:

       <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="email"
        android:inputType="textEmailAddress"
        android:id="@+id/email"
        />

и

       boolean isEmailValid(CharSequence email) {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(email)
                .matches();
      }
10 голосов
/ 03 декабря 2010

Вы можете использовать регулярное выражение для этого. Что-то вроде следующего.

Pattern pattern = Pattern.compile(".+@.+\\.[a-z]+");

String email = "xyz@xyzdomain.com";

Matcher matcher = pattern.matcher(email);

boolean matchFound = matcher.matches();

Примечание: проверьте приведенное выше регулярное выражение, не используйте его как есть.

8 голосов
/ 08 ноября 2017

В пакете android.util есть класс Patterns, что выгодно здесь. Ниже приведен метод, который я всегда использую для проверки электронной почты и многих других вещей

private boolean isEmailValid(String email) {
    return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
...