在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?
当前回答
不要使用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帐户或其他东西。
其他回答
使用扩展函数的最简单的Kotlin解决方案:
fun String.isEmailValid() =
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}" +
")+"
).matcher(this).matches()
然后你可以这样验证:
"testemail6589@gmail.com".isEmailValid()
如果你在kotlin-multiplatform中没有访问Pattern,这是等价的:
fun String.isValidEmail() = Regex(emailRegexStr).matches(this)
根据模式。EMAIL_ADDRESS,这个邮件是正确的“abc@abc.c”。所以我在模式中修改了正则表达式。EMAIL_ADDRESS并增加了域的最小长度。 下面是Kotlin的函数:
fun isEmailValid(email: String): Boolean =
email.isNotEmpty() && 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\\-]{1,25}" +
")+"
).matcher(email).matches()
我只是将域部分从{0,25}改为{1,25}。
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
}
Linkify类有一些非常有用的helper方法,包括用于获取电话号码和电子邮件地址的正则表达式,例如:
http://developer.android.com/reference/android/text/util/Linkify.html
对于电子邮件验证,android提供了一些内置模式。但它只支持API级别8及以上。
下面是使用该模式检查电子邮件验证的代码。
private boolean Email_Validate(String email)
{
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
确保执行此方法后,您应该检查,如果此方法返回真,那么您允许保存电子邮件,如果此方法返回假,则显示电子邮件是“无效”的消息。
希望你能得到答案, 谢谢你。
推荐文章
- 从资产中读取文件
- 在不活动的地方调用getLayoutInflater()
- 设置Android布局元素的背景颜色
- 错误:'keytool'不能被识别为内部或外部命令、可操作程序或批处理文件
- 在应用程序本身中更改Locale
- apk (.apk)和应用程序包(.aab)的区别
- 如何设置超时在改造库?
- Android - SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
- TextView的字体大小在Android应用程序改变字体大小从本机设置
- 如何模拟Android杀死我的进程
- 禁用EditText闪烁光标
- Android Eclipse -无法找到*.apk
- 设置TextView文本从html格式的字符串资源在XML
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Android加载JS包失败