java - 实时验证(点击按钮前)

标签 java android android-textwatcher

有什么方法可以在用户单击按钮之前实时验证 EditText 字段。

例如,如果我有

if (password.length() < 6) {
    passwordwrapper.setError("Password must have at least 6 characters");
    return;
}

if (!validateEmail(email)) {
    emailwrapper.setError("Invalid email");
    return;
}

使用 validateEmail 方法

private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";
private Pattern pattern = Pattern.compile(EMAIL_PATTERN);
private Matcher matcher;

public boolean validateEmail(String email) {
    matcher = pattern.matcher(email);
    return matcher.matches();
}

我如何设置 TextWatcher 或其他东西来实时验证它?

最佳答案

TextWatcher当类型的对象附加到 Editable 时使用,当文本更改时将调用其方法。这是设置Textwatcher的最简单方法:

   EditText inputName = (EditText) findViewById(R.id.input_name);
   EditText inputEmail = (EditText) findViewById(R.id.input_email);
   EditTextinputPassword = (EditText) findViewById(R.id.input_password);
   TextInputLayout inputLayoutEmail = (TextInputLayout) findViewById(R.id.input_layout_email);

   inputName.addTextChangedListener(new MyTextWatcher(inputName));
   inputEmail.addTextChangedListener(new MyTextWatcher(inputEmail));
   inputPassword.addTextChangedListener(new MyTextWatcher(inputPassword))

验证电子邮件

    private boolean validateEmail() {
    String email = inputEmail.getText().toString().trim();

    if (email.isEmpty() || !isValidEmail(email)) {
        inputLayoutEmail.setError(getString(R.string.err_msg_email));
        requestFocus(inputEmail);
        return false;
    } else {
        inputLayoutEmail.setErrorEnabled(false);
    }

    return true;
}

检查邮箱是否有效,

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

实现它们,

private class MyTextWatcher implements TextWatcher {

    private View view;

    private MyTextWatcher(View view) {
        this.view = view;
    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void afterTextChanged(Editable editable) {
        switch (view.getId()) {
            case R.id.input_name:
                validateName();
                break;
            case R.id.input_email:
                validateEmail();
                break;
            case R.id.input_password:
                validatePassword();
                break;
        }
    }
}

希望对您有所帮助。

关于java - 实时验证(点击按钮前),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998205/

相关文章:

java - Windows 7 64、Eclipse 64、JDK 64 和指定的 DSN 包含架构不匹配

java - iCal4j 和换行符

android - 使用 shouldInterceptRequest 阻止数据加载

android - 设置Activity背景颜色更改android studio

java - 格式化 TextWatcher android

java - UDP - 多线程

java - 为什么 App Engine 上的 JRuby 应用程序需要很长时间才能启动(与 Python 应用程序相比)?

android - WebView setAllowUniversalAccessFromFileURLs 在低于 Api(16) 的版本上

android - android中的电话号码自动格式化

android - 如何保持按钮禁用任何editText为空?