在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?
当前回答
Following是我用的。然而,它包含额外的字符比正常的电子邮件,但这是对我的要求。
public boolean isValidEmail(String inputString) {
String s ="^((?!.*?\.\.)[A-Za-z0-9\.\!\#\$\%\&\'*\+\-\/\=\?\^_`\{\|\}\~]+@[A-Za-z0-9]+[A-Za-z0-9\-\.]+\.[A-Za-z0-9\-\.]+[A-Za-z0-9]+)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(inputString);
return matcher.matches();
}
这个问题的答案是:- 要求用给定的点验证电子邮件地址
解释,
(? !)。* ? . .)“Negative Lookhead”否定2个连续的点。 [A-Za-z0-9 .!#\$\%\&\'*+-/\=\?\^_ '{\|}\~]+至少一个 角色定义。(“\”用于转义)。 可能有一个。 [A-Za-z0-9]+然后至少定义一个字符。 [A-Za-z0-9 -。*零或任何已定义字符的重复。 [A-Za-z0-9]+点后至少一个字符。
其他回答
如果您正在使用API 8或更高版本,您可以使用现成的Patterns类来验证电子邮件。示例代码:
public final static boolean isValidEmail(CharSequence target) {
if (target == null)
return false;
return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
如果您支持的API级别低于8,那么您可以简单地将Patterns.java文件复制到您的项目中并引用它。您可以从这个链接获得Patterns.java的源代码
我强烈建议你不要尝试“验证”电子邮件地址,你只会让自己陷入很多工作没有好的理由。
只是要确保输入的内容不会破坏你自己的代码——例如,没有空格或可能导致异常的非法字符。
其他任何事情只会让你付出大量的工作,回报却微乎其微……
Following是我用的。然而,它包含额外的字符比正常的电子邮件,但这是对我的要求。
public boolean isValidEmail(String inputString) {
String s ="^((?!.*?\.\.)[A-Za-z0-9\.\!\#\$\%\&\'*\+\-\/\=\?\^_`\{\|\}\~]+@[A-Za-z0-9]+[A-Za-z0-9\-\.]+\.[A-Za-z0-9\-\.]+[A-Za-z0-9]+)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(inputString);
return matcher.matches();
}
这个问题的答案是:- 要求用给定的点验证电子邮件地址
解释,
(? !)。* ? . .)“Negative Lookhead”否定2个连续的点。 [A-Za-z0-9 .!#\$\%\&\'*+-/\=\?\^_ '{\|}\~]+至少一个 角色定义。(“\”用于转义)。 可能有一个。 [A-Za-z0-9]+然后至少定义一个字符。 [A-Za-z0-9 -。*零或任何已定义字符的重复。 [A-Za-z0-9]+点后至少一个字符。
我们现在有一个简单的电子邮件模式匹配器。
Java:
private static boolean isValidEmail(String email) {
return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
芬兰湾的科特林功能:
private fun isValidEmail(email: String): Boolean {
return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
芬兰湾的科特林扩展:
fun String.isValidEmail() =
!TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()
不要使用reg-ex。
显然,下面是一个正确验证符合RFC 2822的大多数电子邮件地址的reg-ex,(对于“user@gmail.com.nospam”这样的地址仍然会失败,org.apache.commons.validator. emailvalidator也是如此)
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
验证电子邮件最简单的方法可能是向提供的地址发送确认电子邮件,如果它反弹,那么它是无效的。
如果你想执行一些基本的检查,你可以检查它的形式是*@*
如果你有一些业务逻辑特定的验证,那么你可以使用正则表达式来执行,例如必须是gmail.com帐户或其他东西。
推荐文章
- 警告: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文件