在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?
当前回答
你也可以用
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
如果邮件无效,它将抛出一个AddressException异常。
不幸的是,Android不支持jndi-dns,但是为了让你了解更强大的电子邮件验证,你可以使用它来验证电子邮件域。也许安卓专家可以帮忙,并展示是否有类似的替代品……这里提供了一个使用“常规”java的示例实现。
EDIT
我刚意识到javax。邮件也不支持…但这篇文章展示了一个变通方法。
其他回答
这里的关键是要完全验证电子邮件地址。你不只是想检查它的语法正确性,你想检查电子邮件地址是否真实。
两个明显的原因:真正的用户经常输入错误的电子邮件地址,一些用户可能会输入假的电子邮件地址。因此,您需要进行语法检查和存在性检查。
我在Android上发现的最好的方法是使用免费的Cloudmersive Validation API。
代码如下所示:
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
EmailApi apiInstance = new EmailApi();
String email = "email_example"; // String | Email address to validate, e.g. \"support@cloudmersive.com\". The input is a string so be sure to enclose it in double-quotes.
try {
FullEmailValidationResponse result = apiInstance.emailFullValidation(email);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EmailApi#emailFullValidation");
e.printStackTrace();
}
我在我所有的应用程序中都使用了这个功能,它很棒,因为我可以在登录时在UX中验证电子邮件地址。
public boolean isValidEmail(String email)
{
boolean isValidEmail = false;
String emailExpression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(emailExpression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches())
{
isValidEmail = true;
}
return isValidEmail;
}
这是android.util.Patterns.EMAIL_ADDRESS
(a-zA-Z0-9 + ._ \ % - +) {1256} \ @ [a-zA-Z0-9] [a-zA-Z0-9 -]{0, 64}(。[a-zA-Z0-9] [a-zA-Z0-9 -] {0,25}) +
字符串将匹配它,如果
Start by 1->256 character in (a-z, A-Z, 0-9, +, ., _, %, - , +)
then 1 '@' character
then 1 character in (a-z, A-Z, 0-9)
then 0->64 character in (a-z, A-Z, 0-9, -)
then **ONE OR MORE**
1 '.' character
then 1 character in (a-z, A-Z, 0-9)
then 0->25 character in (a-z, A-Z, 0-9, -)
例如一些特殊匹配的电子邮件
a@b.c
a+@b-.c
a@b.c.d.e.f.g.h
您可以根据自己的情况修改此模式,然后通过
fun isValidEmail(email: String): Boolean {
return Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
下一个模式用于K-9邮件:
public static final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile(
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
);
你可以使用函数
private boolean checkEmail(String email) {
return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}
最简单的电子邮件验证方式。
EditText TF;
public Button checkButton;
public final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile(
"[a-zA-Z0-9+._%-+]{1,256}" +
"@" +
"[a-zA-Z0-9][a-zA-Z0-9-]{0,64}" +
"(" +
"." +
"[a-zA-Z0-9][a-zA-Z0-9-]{0,25}" +
")+"
);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
TF=(EditText) findViewById(R.id.TF);
checkButton=(Button) findViewById(R.id.checkButton);
checkButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String email=TF.getText().toString();
if(checkEmail(email))
Toast.makeText(getApplicationContext(),"Valid Email Addresss", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(),"Invalid Email Addresss", Toast.LENGTH_SHORT).show();
}
});
}
private boolean checkEmail(String email) {
return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}}
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件