Android:OnTextChanged 电子邮件验证未按预期工作

Android: OnTextChanged email validation is not working as expected

我正在使用以下代码来验证电子邮件输入

  private boolean validateEmail(String email) {
        String emailPattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
        Pattern pattern = Pattern.compile(emailPattern);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

我在 onTextChanged 上执行此操作。代码如下(我用的是ButterKnife

@OnTextChanged(R.id.et_email)
    public void checkCorrectEmail() {
        if (!validateEmail(mEditTextEmail.getText().toString().trim())) {
            isValidated = false;
            mEditTextEmail.setError("Please enter email address");
            mEditTextEmail.requestFocus();
        } else {
            isValidated = true;
        }
    }

问题是不够智能。例如,如果我键入 myemail@gmail.com,它仍然会显示错误消息。但是,如果我输入 myemail@gmail.com 然后输入 space 并单击删除 space 那么一切都很好,错误消失了。

以前此验证是在 onClick 按钮上进行的。我在这里做错了什么?

    @OnTextChanged(R.id.et_email)
        public void checkCorrectEmail () {
            if (!validateEmail(mEditTextEmail.getText().toString().trim())) {
                isValidated = false;
                mEditTextEmail.setError("Please enter email address");
                mEditTextEmail.requestFocus();
            } else {
                isValidated = true;
                mEditTextEmail.setError(null);
            }
}

100% 工作

试试这个:

@OnTextChanged(R.id.et_email)
public void checkCorrectEmail() {
    if (!validateEmail(mEditTextEmail.getText().toString().trim())) {
        isValidated = false;
        mEditTextEmail.setError("Please enter email address");
        mEditTextEmail.requestFocus();
    } else {
        mEditTextEmail.setError(null)
        isValidated = true;
    }
}

清除输入正确的错误

使用in-build Email模式检查器方法:

@OnTextChanged(R.id.et_email)
public void checkCorrectEmail () {
if (!Patterns.EMAIL_ADDRESS.matcher(mEditTextEmail.getText().toString()).matches()){
    isValidated = false;
    mEditTextEmail.setError("Please enter a Valid E-Mail Address!");
    mEditTextEmail.requestFocus();
}else {
    isValidated = true;
    mEditTextEmail.setError(null);
}