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

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

Ответы [ 31 ]

5 голосов
/ 21 января 2017

Для проверки электронной почты Android предоставьте Шаблон InBuilt . Но он поддерживает только API уровня 8 и выше .

Вот код для использования этого шаблона для проверки правильности электронной почты.

  private boolean Email_Validate(String email) 
  {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
  }

Убедитесь, что после выполнения этого метода вы должны проверить, что если этот метод возвращает true , то вы разрешаете сохранять электронную почту, а если этот метод возвращает false , тогда отображается сообщение, что электронная почта "" Invalid».

Надеюсь, вы получите ответ, Спасибо тебе.

5 голосов
/ 08 апреля 2013

Вызовите этот метод, если вы хотите проверить идентификатор электронной почты.

public static boolean isValid(String email)
{
   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()) 
   {
      return true;
   }
   else{
   return false;
   }
}
5 голосов
/ 12 мая 2018

Вы можете написать расширение Kotlin следующим образом:

fun String.isValidEmail() =
        this.isNotEmpty() && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()

А потом назовите это так:

email.isValidEmail()
4 голосов
/ 05 декабря 2013

Подтвердите формат вашего адреса электронной почты. Ex-virag@gmail.com

public boolean emailValidator(String email) 
{
    Pattern pattern;
    Matcher matcher;
    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.compile(EMAIL_PATTERN);
    matcher = pattern.matcher(email);
    return matcher.matches();
}
3 голосов
/ 01 ноября 2012
    public boolean isValidEmail(String email)
{
    boolean isValidEmail = false;

    String emailExpression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(emailExpression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches())
    {
        isValidEmail = true;
    }
    return isValidEmail;
}
3 голосов
/ 25 октября 2011

Могу я РЕКОМЕНДУЕТСЯ порекомендовать вам не пытаться «проверять» адреса электронной почты, вы просто начнете много работать без веской причины.

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

Все остальное просто заставит вас много работать для минимального возврата ...

2 голосов
/ 05 сентября 2018

Вот android.util.Patterns.EMAIL_ADDRESS

[A-Za-Z0-9 + ._ \% - +] {1256} \ @ [A-Za-z0-9] [A-Za-Z0-9 -] {0,64} (. [A-Za-Z0-9] [A-Za-Z0-9 -] {0,25}) + * * 1005

String будет соответствовать, если

Start by 1->256 character in (a-z, A-Z, 0-9, +, ., _, %, - , +)  
then 1 '@' character  
then 1 character in (a-z, A-Z, 0-9)  
then 0->64 character in (a-z, A-Z, 0-9, -)  
then **ONE OR MORE** 
         1 '.' character   
    then 1 character in (a-z, A-Z, 0-9)   
    then 0->25 character in (a-z, A-Z, 0-9, -)

Пример электронной почты специального соответствия

a@b.c
a+@b-.c
a@b.c.d.e.f.g.h

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

fun isValidEmail(email: String): Boolean {
    return Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
1 голос
/ 07 июля 2014

Попробуйте этот код .. Это действительно работает ..

            if (!email
                    .matches("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"))
            {
                Toast.makeText(getApplicationContext(), "Email is invalid",
                        Toast.LENGTH_LONG).show();
                return;
            }
1 голос
/ 16 августа 2011

Попробуйте этот простой метод, который не может принять адрес электронной почты, начинающийся с цифр:

boolean checkEmailCorrect(String Email) {
    if(signupEmail.length() == 0) {
        return false;
    }

    String pttn = "^\\D.+@.+\\.[a-z]+";
    Pattern p = Pattern.compile(pttn);
    Matcher m = p.matcher(Email);

    if(m.matches()) {
        return true;
    }

    return false;
}
1 голос
/ 09 сентября 2018

Ключевым моментом здесь является то, что вы хотите полностью подтвердить адрес электронной почты. Вы не хотите просто проверять синтаксическую корректность, вы хотите проверить, является ли адрес электронной почты реальным.

Две очевидные причины: реальные пользователи часто неправильно вводят свои адреса электронной почты, и некоторые пользователи могут вводить поддельные адреса электронной почты. Следовательно, вы хотите выполнить синтаксическую проверку и проверку существования.

Лучший способ сделать это, как я обнаружил на Android, - использовать для этого бесплатный Cloudmersive Validation API .

Код выглядит так:

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");

EmailApi apiInstance = new EmailApi();
String email = "email_example"; // String | Email address to validate, e.g. \"support@cloudmersive.com\". The input is a string so be sure to enclose it in double-quotes.
try {
    FullEmailValidationResponse result = apiInstance.emailFullValidation(email);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EmailApi#emailFullValidation");
    e.printStackTrace();
}

Я использую это во всех своих приложениях, и это здорово, потому что я могу проверить адреса электронной почты в UX в точке входа.

...