EditText-Android上的电子邮件验证

EditText-Android上的电子邮件验证,android,validation,email,android-edittext,Android,Validation,Email,Android Edittext,我有一个电子邮件编辑文本,我想用电子邮件验证来检查它 这是我的电子邮件验证码 public final static boolean isValidEmail(CharSequence target) { if (target == null) { return false; } else { return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches(); } }

我有一个电子邮件编辑文本,我想用电子邮件验证来检查它

这是我的电子邮件验证码

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

public void showAlertValidation() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this);
    alertDialog.setTitle("Failed");
    alertDialog.setMessage("Invalid Email");
    alertDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alertDialog.show();
}
editTextEmail= (EditText) findViewById(R.id.editTextEmail);
email = editTextEmail.getText().toString();
if(email.length() == 0) {
    editTextEmail.setError("Email required!");
    if (isValidEmail(email)) {
          Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
     }
     else{
          showAlertValidation();
     }
}
这是我的EditText验证代码

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

public void showAlertValidation() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this);
    alertDialog.setTitle("Failed");
    alertDialog.setMessage("Invalid Email");
    alertDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alertDialog.show();
}
editTextEmail= (EditText) findViewById(R.id.editTextEmail);
email = editTextEmail.getText().toString();
if(email.length() == 0) {
    editTextEmail.setError("Email required!");
    if (isValidEmail(email)) {
          Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
     }
     else{
          showAlertValidation();
     }
}
问题是编辑文本的结果。当EditText的值为null时,它运行
showAlertValidation()
但是如果EditText的值是“email”或email@example“或”email@example.com,它不会运行
showAlertValidation()

我的代码有问题吗?

我想这就是你犯错误的地方(编辑文本验证代码):


您错误地将
EditText
文本长度与0进行比较,并且只有当该值为真时,才执行验证逻辑

以下是正确的代码:

 @Override
        public void onClick(View v) {
            String email = editTextEmail.getText().toString();
            if(email.length() != 0) {
                if (isValidEmail(email)) {
                    Toast.makeText(getApplicationContext(), "Valid email address!", Toast.LENGTH_SHORT).show();
                }
                else{
                    editTextEmail.setError("Email required!");
                    showAlertValidation();
                }
            }
            else{
                editTextEmail.setError("Email required!");
            }
        }
在使用string.trim()检查电子邮件字符串的长度之前,应清除空格“”


最好创建一个类来验证电子邮件。这样你就可以在任何需要的地方重复使用它。您甚至不需要将edittext的文本放在单独的字符串中。进行以下课程:

public class EmailValidator {
private Pattern pattern;
private Matcher matcher;
private static EmailValidator sInstance;


public static EmailValidator getInstance() {
    if (sInstance == null) {
        sInstance = new EmailValidator();
    }
    return sInstance;
}
private static final String EMAIL_PATTERN =
        "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

public EmailValidator() {
    pattern = Pattern.compile(EMAIL_PATTERN);
}

public boolean validate(final String hex) {

    matcher = pattern.matcher(hex);
    return matcher.matches();

}}
现在使用此类检查edittext电子邮件的有效性,如下所示:

if(!EmailValidator.getInstance().validate(editTextEmail.getText().toString().trim())){
                    editTextEmail.setError("Invalid email address");
                }

希望这有帮助。

问题在于您的if状况

if(email.length() == 0) 
    {
        editTextEmail.setError("Email required!");
        if (isValidEmail(email)) 
            {
                Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
            }
        else
            {
                showAlertValidation();
            }
    }
因为它只在editText为空时验证您的电子邮件地址。 您可以做的是:

email.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
                {

                }

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

                }

            @Override
            public void afterTextChanged(Editable s)
                {
                    if(s.length() > 0) 
                        {
                            if (isValidEmail(email)) 
                                {
                                    editTextEmail.setError(null);
                                    Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
                                }
                            else
                               {
                                    Toast.makeText(getApplicationContext(),"valid email address Required",Toast.LENGTH_SHORT).show();
                               }
                        }
                }
        });

我们现在有一个简单的电子邮件模式匹配器

Java:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }
fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()
Kotlin函数:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }
fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()
Kotlin扩展名:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }
fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()

你是说如果(email.length()!=0)
?哦,是的,那是我的错。谢谢。我认为你应该接受萨尔曼·纳齐尔的帖子作为正确答案。