原正則 [a-zA-Z0-9._-]+@[a-z]+.[a-z]+ 中的點號 . 為任意字元,導致 @ 後僅需 3 字元即判定有效。需轉義為 \\.。
String emailRegex = "[a-zA-Z0-9._-]+@[a-z]+\\.[a-z]+";
editText.addTextChangedListener(new TextWatcher() {
@Override public void afterTextChanged(Editable s) {
String input = s.toString();
boolean valid = input.matches(emailRegex) && input.length() > 0;
hintTextView.setText(valid ? "有效 Email" : "無效 Email");
}
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
boolean valid = Patterns.EMAIL_ADDRESS.matcher(input).matches(); // API 8+
afterTextChanged 執行,避免游標跳動。