我制作了这段代码来尝试EditTextEmail
你只能写一封电子邮件,如果你写的东西不是电子邮件发送一个Toast
EditText EditTextEmail;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
EditTextEmail = (EditText) findViewById(R.id.EditTextEmail);
final String compruebaemail = EditTextEmail.getEditableText().toString().trim();
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!compruebaemail.matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+"))
{
Toast.makeText(MainActivity.this, "Por favor, introduce bien su email", Toast.LENGTH_LONG).show();
}
}
});
}
}
问题基本上是我写了我写的命令Toast
,就好像我写得不好。
失败的文本示例:
[email protected]
在您输入文本之前,变量
compruebaemail
被分配在 中。onCreate
另一方面,如果它是在 event 中分配的
onClick
,那么只有这样它才会有最后输入的值。请注意,我选择了另一个正则表达式,取自我的问题的答案:Validating an email in JavaScript。
您使用的正则表达式可能存在的问题是:
点必须被转义(如果它不匹配任何字符)
您必须允许超过 1 分(示例
[email protected]
)可能在域中允许大小写(因为您只允许
[a-z]
,并且正则表达式默认区分大小写)并允许其他字符,在任何电子邮件中都有效(例如:
+
)。我使用的正则表达式不适用于所有有效的电子邮件,但我认为它适用于大多数情况。事实上,如果真的要接受根据 RFC 的所有有效案例,那么您将接受通常不想接受的“异常”形式。但是,电子邮件验证的主题太广泛,超出了这个问题的范围。
TextInputLayout
您可以使用and 方法执行验证setError()
来定义消息,setErrorEnabled()
以启用它,例如:当验证检测到不正确的电子邮件时,将启用错误消息:
我
TextInputLayout
为前面的示例添加了一个示例:在这个例子中,对
EdiText
带有 id的输入的文本进行验证mi_email
,根据得到的值我们决定是否通过TextInputLayout
.由于android 2.2+版本有这个方法:
如果你想要一个替代方案,我建议如下:
您的代码中的实现如下:
如果您想使用第一种方法,那将是完全相同的方法。