我想验证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._-]+@[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个字符时,它会显示消息“有效电子邮件”,当我在介绍完整的电子邮件时它必须出现。
任何建议?
谢谢大家!
答案 0 :(得分:23)
只需更改正则表达式,如下所示:
"[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"
因为。 (点)表示在你的点之前匹配任何单个char.ADD双反斜杠代表一个真正的点。
答案 1 :(得分:15)
我编写了一个扩展EditText的库,它本身支持一些验证方法,实际上非常灵活。
目前,正如我所写,原生支持(通过 xml属性)验证方法是:
您可以在此处查看: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"
/>
还有一个测试应用程序展示了库的可能性。
这是验证电子邮件字段的应用的屏幕截图。
答案 2 :(得分:5)
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();
}
答案 3 :(得分:4)
如果您使用的是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();
}
}
如果您甚至支持少于8的API级别,那么您只需将Patterns.java
文件复制到项目中并引用它即可。您可以从this link
Patterns.java
的源代码
答案 4 :(得分:3)
这里有几个不错的选项,包括用于API 8 +的android.util.Patterns.EMAIL_ADDRESS。
答案 5 :(得分:1)
请勿在代码中执行此操作。您可以使用EditText的inputType属性。
<EditText
android:id="@+id/edit_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"/>
答案 6 :(得分:1)
尝试这种模式.....
editText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
pattern = Pattern.compile(".+@.+\\.[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) {
}
});
答案 7 :(得分:0)
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();
}
答案 8 :(得分:0)
//验证您的电子邮件地址格式。 Ex-abci@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();
}