Подтвердить что ты не робот

Проверка электронной почты внутри EditText

Я хочу проверить электронную почту, введенную внутри EditText, и этот код, который у меня уже есть:

final EditText textMessage = (EditText) findViewById (R.id.textMessage);

final TextView text = (TextView) findViewById (R.id.text);

    textMessage.addTextChangedListener(new TextWatcher() { 
        public void afterTextChanged(Editable s) { 
            if (textMessage.getText().toString().matches("[a-zA-Z0-9._-][email protected][a-z]+.[a-z]+") && s.length() > 0)
            {
                text.setText("valid email");
            }
            else
            {
                text.setText("invalid email");
            }
        } 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
        public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 

Проблема в том, что когда я вводил 3 символа после "@", появляется сообщение "действительный адрес электронной почты", когда оно должно появляться, когда я представляю полное письмо.

Любое отклонение?

Спасибо всем!

4b9b3361

Ответ 1

Просто измените свое регулярное выражение следующим образом:

"[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+"

Потому что. (точка) означает соответствие любому одиночному char.ADD двойному обратному косую черту перед вашей точкой, чтобы стоять за реальную точку.

Ответ 2

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

Текущий, когда я пишу, изначально поддерживается (через xml-атрибуты):

  • regexp: для пользовательского регулярного выражения
  • число: только для числового поля
  • alpha: для поля только альфа
  • alphaNumeric: угадайте, что?
  • электронная почта: проверяет правильность поля в поле
  • creditCard: проверяет, что поле содержит действительную кредитную карту с использованием алгоритма Луна
  • телефон: проверяет, что поле содержит действительный номер телефона
  • domainName: проверяет, что это поле содержит допустимое имя домена (всегда проходит тест на уровне API < 8)
  • ipAddress: проверяет, что поле содержит действительный IP-адрес webUrl: проверяет, что поле содержит действительный url (всегда проходит тест на уровне API < 8)
  • nocheck: он ничего не проверяет. (По умолчанию)

Вы можете проверить это здесь: https://github.com/vekexasia/android-form-edittext

Надеюсь, вам понравится:)

На странице, которую я связал, вы также сможете найти пример проверки подлинности электронной почты. Здесь я скопирую условный фрагмент:

<com.andreabaccega.widget.FormEditText
       style="@android:style/Widget.EditText"
       whatever:test="email"
       android:id="@+id/et_email"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/hint_email"
       android:inputType="textEmailAddress"
       />  

Существует также тестовое приложение, демонстрирующее возможности библиотеки.

Это скриншот приложения, проверяющего поле электронной почты.

email validation done thorugh xml+library

Ответ 3

public boolean validateEmail(String email) {

Pattern pattern;
Matcher matcher;
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();

}

Ответ 4

Несколько хороших вариантов здесь, включая android.util.Patterns.EMAIL_ADDRESS для API 8 +.

fooobar.com/questions/26673/...

Ответ 5

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

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

Если вы даже поддерживаете уровень API менее 8, вы можете просто скопировать файл Patterns.java в свой проект и ссылаться на него. Вы можете получить исходный код для Patterns.java из эту ссылку

Ответ 6

Не делайте этого в коде. Вы можете использовать атрибут inputType для EditText.

    <EditText 
        android:id="@+id/edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"/>

Ответ 7

Попробуйте этот шаблон.....

editText.addTextChangedListener(новый TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
            pattern = Pattern.compile("[email protected]+\\.[a-z]+");
            matcher = pattern.matcher(editText.getText().toString());

            if(matcher.matches()) {
                Log.i("Test","--------Valid Email--------");
            }else {

                Log.i("Test","--------Invalid Email------");
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        } 
    }); 

Ответ 8

private boolean validateEmailAddress(CharSequence emailAddress)
{

  if( Build.VERSION.SDK_INT >= 8 )
  {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches();
  }

  Pattern pattern;
  Matcher matcher;
  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(emailAddress);

  return matcher.matches();
}

Ответ 9

//подтвердите свой формат адреса электронной почты. [email protected]

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