在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?
当前回答
这是Android Studio的建议:
public static boolean isEmailValid(String email) {
return !(email == null || TextUtils.isEmpty(email)) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
其他回答
自API 8 (android 2.2)以来,有一个模式:android.util. patterns . email_address http://developer.android.com/reference/android/util/Patterns.html
所以你可以用它来验证yourEmailString:
private boolean isValidEmail(String email) {
Pattern pattern = Patterns.EMAIL_ADDRESS;
return pattern.matcher(email).matches();
}
如果邮件有效,则返回true
乌利希期刊指南: 这个模式的源代码是:
public static final Pattern EMAIL_ADDRESS
= 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}" +
")+"
);
参考网址:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java
所以你可以自己构建它来兼容API < 8。
这里的关键是要完全验证电子邮件地址。你不只是想检查它的语法正确性,你想检查电子邮件地址是否真实。
两个明显的原因:真正的用户经常输入错误的电子邮件地址,一些用户可能会输入假的电子邮件地址。因此,您需要进行语法检查和存在性检查。
我在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中验证电子邮件地址。
你也可以用
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
如果邮件无效,它将抛出一个AddressException异常。
不幸的是,Android不支持jndi-dns,但是为了让你了解更强大的电子邮件验证,你可以使用它来验证电子邮件域。也许安卓专家可以帮忙,并展示是否有类似的替代品……这里提供了一个使用“常规”java的示例实现。
EDIT
我刚意识到javax。邮件也不支持…但这篇文章展示了一个变通方法。
下一个模式用于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();
}
可以使用正则表达式。大致如下。
Pattern pattern = Pattern.compile(".+@.+\\.[a-z]+");
String email = "xyz@xyzdomain.com";
Matcher matcher = pattern.matcher(email);
boolean matchFound = matcher.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文件