我尝试了这个简单的例子。
final String email = edt.getText().toString().trim();
//final String emailPattern = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
final String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
btnchk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (email.matches(emailPattern))
{
Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(),"Invalid email address", Toast.LENGTH_SHORT).show();
}
}
});
尝试了这两种模式,但我收到消息为无效的电子邮件地址,因为我输入的任何正确的电子邮件ID。
答案 0 :(得分:2)
你的正则表达式很好。您只需要在点击监听器中读取您的电子邮件地址
btnchk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String email = edt.getText().toString().trim();
if (email.matches(emailPattern))
{
问题是,当您的edt
空时,您正在阅读{{1}}文本框,因此正则表达式测试失败。
答案 1 :(得分:1)
我认为@Ravi发现了问题的直接原因。您没有验证正确的字符串。
但是,你的正则表达式也是错误的,因为它排除了许多实际上有效的电子邮件地址。例如:
参考:
答案 2 :(得分:0)
尝试:
if(isEditTextContainEmail(edtEmailAddress))
{
Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(),"Invalid email address", Toast.LENGTH_SHORT).show();
}
使用此方法:
public static boolean isEditTextContainEmail(EditText argEditText) {
try {
Pattern pattern = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
Matcher matcher = pattern.matcher(argEditText.getText());
return matcher.matches();
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
答案 3 :(得分:0)
试试这个注册表:
[a-zA-Z0-9._-]+@[a-z]+\.[a-z]+
答案 4 :(得分:0)
我认为这是检查电子邮件验证的更好解决方案试试这个..
public final static boolean isValidEmail(CharSequence yourEmail) {
if (yourEmail== null) {
return false;
} else {
return android.util.Patterns.EMAIL_ADDRESS.matcher(yourEmail).matches();
}
}
我希望为你的案子工作:)