如何检查电子邮件验证?错误是什么?
How to check email validation?What is the error?
我试过这个简单的例子。
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 的电子邮件地址无效。
尝试:
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;
}
}
试试这个正则表达式:
[a-zA-Z0-9._-]+@[a-z]+\.[a-z]+
你的正则表达式没问题。您只需要在点击监听器中读取您的电子邮件地址为
btnchk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String email = edt.getText().toString().trim();
if (email.matches(emailPattern))
{
问题是您在阅读 edt
文本框时 为空 ,因此 regex 测试失败。
我认为这是 chek 电子邮件验证的更好解决方案试试这个..
public final static boolean isValidEmail(CharSequence yourEmail) {
if (yourEmail== null) {
return false;
} else {
return android.util.Patterns.EMAIL_ADDRESS.matcher(yourEmail).matches();
}
}
我希望能为您服务:)
我认为@Ravi 已经发现了您问题的直接原因。您没有验证正确的字符串。
但是,您的正则表达式也是错误的,因为它排除了许多实际上有效的电子邮件地址。例如:
- 本地部分可以是带引号的字符串
- 本地部分可以包含各种非字母数字字符
- 域部分可以有一个组件,也可以有两个以上的组件
- 域部分可以是IP地址,
- 本地和域部分可以包含非 ASCII 字符。
参考:
我试过这个简单的例子。
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 的电子邮件地址无效。
尝试:
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;
}
}
试试这个正则表达式:
[a-zA-Z0-9._-]+@[a-z]+\.[a-z]+
你的正则表达式没问题。您只需要在点击监听器中读取您的电子邮件地址为
btnchk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String email = edt.getText().toString().trim();
if (email.matches(emailPattern))
{
问题是您在阅读 edt
文本框时 为空 ,因此 regex 测试失败。
我认为这是 chek 电子邮件验证的更好解决方案试试这个..
public final static boolean isValidEmail(CharSequence yourEmail) {
if (yourEmail== null) {
return false;
} else {
return android.util.Patterns.EMAIL_ADDRESS.matcher(yourEmail).matches();
}
}
我希望能为您服务:)
我认为@Ravi 已经发现了您问题的直接原因。您没有验证正确的字符串。
但是,您的正则表达式也是错误的,因为它排除了许多实际上有效的电子邮件地址。例如:
- 本地部分可以是带引号的字符串
- 本地部分可以包含各种非字母数字字符
- 域部分可以有一个组件,也可以有两个以上的组件
- 域部分可以是IP地址,
- 本地和域部分可以包含非 ASCII 字符。
参考: