在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?
当前回答
下一个模式用于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();
}
其他回答
我强烈建议你不要尝试“验证”电子邮件地址,你只会让自己陷入很多工作没有好的理由。
只是要确保输入的内容不会破坏你自己的代码——例如,没有空格或可能导致异常的非法字符。
其他任何事情只会让你付出大量的工作,回报却微乎其微……
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]+点后至少一个字符。
Kotlin扩展函数
fun EditText.isValidEmail() : Boolean{
return if(Pattern
.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$")
.matcher(text.toString()).matches()){
true
}else {
hint = context.getString(R.string.invalid_email_adress)
false
}
}
Use
if(!emailEt.isValidEmail()){
return
}
请注意,大多数正则表达式对于国际域名(IDN)和新的顶级域名(如.mobi或.info)无效(如果您检查国家代码或.org, .com, .gov等)。
有效的检查应该将本地部分(在at符号之前)和域部分分开。您还应该考虑本地部分和域的最大长度(包括at号在内的255个字符的总和)。
最好的方法是将地址转换为IDN兼容的格式(如果需要),验证本地部分(RFC),检查地址的长度和检查域的可用性(DNS MX查找)或简单地发送电子邮件。
下一个模式用于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();
}
推荐文章
- 如何在android中复制一个文件?
- adb找不到我的设备/手机(MacOS X)
- 如何在新的材质主题中改变背面箭头的颜色?
- androidviewpager与底部点
- 相同的导航抽屉在不同的活动
- 如何从视图中获得托管活动?
- 单一的TextView与多种颜色的文本
- 如何在非活动类(LocationManager)中使用getSystemService ?
- 在清单中注册应用程序类?
- Android:从数组中编程创建旋转器
- Android命令行工具sdkmanager总是显示:警告:无法创建设置
- 如何设置RecyclerView应用程序:layoutManager=""从XML?
- 在没有开发服务器的情况下在设备上构建和安装unsigned apk ?
- 操作栏和新引入的工具栏有什么不同?
- 调整浮动动作按钮图标大小(fab)