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

Posted

技术标签:

【中文标题】Android:OnTextChanged 电子邮件验证未按预期工作【英文标题】:Android: OnTextChanged email validation is not working as expected 【发布时间】:2017-06-19 05:09:00 【问题描述】:

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

  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 上进行的。我在这里做错了什么?

【问题讨论】:

【参考方案1】:
    @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% 正常工作

【讨论】:

mEditTextEmail.setError(null);当电子邮件有效时。【参考方案2】:

试试这个:

@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;
    

清除正确输入的错误

【讨论】:

Gautam 也同时回答了问题及其解决方案 时差【参考方案3】:

使用内置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);

【讨论】:

以上是关于Android:OnTextChanged 电子邮件验证未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

android 邮件服务器,全球邮企业邮箱Android(安卓)系统手机 POP3 IMAP协议设置方法

扩展 Android 的默认 Gmail/电子邮件应用程序

如何创建一个创建 onTextChanged Listener 并允许程序员设置不同行为的类

安卓onTextChanged参数解释及实现EditText字数监听 Editable使用

如何在 onTextChanged() 中使用 setSpan() 来保存 onTextChanged() 的参数?

南邮数据结构考试时间