Проверка электронной почты внутри 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 символа после "@", появляется сообщение "действительный адрес электронной почты", когда оно должно появляться, когда я представляю полное письмо.
Любое отклонение?
Спасибо всем!
Ответы
Ответ 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();
}