android.util.Patterns.EMAIL\u地址正在验证无效电子邮件

android.util.Patterns.EMAIL\u地址正在验证无效电子邮件,android,pattern-matching,email-validation,Android,Pattern Matching,Email Validation,这是几封无效的电子邮件 email@domain.web .email@domain.com 我在以下网站上查看了上述电子邮件,所有这些回复均无效。 然而,android.util.Patterns.EMAIL\u ADDRESS模式验证了两者 是否有bug或我遗漏了什么?使用正则表达式匹配下面的模式 String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\

这是几封无效的电子邮件

email@domain.web
.email@domain.com

我在以下网站上查看了上述电子邮件,所有这些回复均无效。


然而,
android.util.Patterns.EMAIL\u ADDRESS
模式验证了两者


是否有bug或我遗漏了什么?

使用正则表达式匹配下面的模式

String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"


private Matcher matcher;
private Pattern pattern = Pattern.compile(EMAIL_PATTERN);


public boolean validateEmail(final String hex) {
    matcher = pattern.matcher(hex);
    return matcher.matches();
}

希望这有帮助。

请检查您是否使用了正确的条件,即您使用了相同的if条件。因为有时我们使用相反的方法。 我知道您使用的是相同的方法,但请检查此方法。我相信这会对你有帮助

/*如果电子邮件有效,则返回true,否则返回false*/

@SuppressLint("DefaultLocale")
public boolean checkForEmail(EditText edit, String editName) {
    String str = edit.getText().toString();
    if (android.util.Patterns.EMAIL_ADDRESS.matcher(str).matches()) {
        return true;
    }
    toastMsg(_context.getString(R.string.please_enter_valid).toString()+" "+editName+ " "
            );
    return false;
}

两者似乎都是有效的电子邮件地址

email@domain.web
.email@domain.com

因为任何电子邮件地址都包含三个组件

<username>@<mail-server>.<mail-servertype or server-location>
@。

这里
android.util.Patterns.EMAIL\u ADDRESS
使用regex验证所有三个组件,并检查所有三个组件是否放置正确。一些常见的混淆示例如下:

  • com@web123.com
    是有效的邮件地址,因为
    com
    可以是用户名,
    web123
    可以是web服务器的名称

  • 。数学。apple@com.in
    也是有效的邮件地址,因为
    .math.apple
    可以是用户名,
    com
    可以是web服务器的名称

  • 无效案例:
    crick@.web.com
    无效,因为
    不能在
    @
    之前或之后出现。没有邮件系统能够识别用户名或邮件服务器名称。

    好吧,最简单的方法是使用java类InternetAddress而不是Android。乌提斯。。。或者regex

    第一个看起来很好。第二封邮件可能有问题。请尝试这种方式,希望这会对您有所帮助,第二封邮件无效-字符。(点、句点、句号)(ASCII:46),前提是它不是第一个或最后一个字符,并且它不是连续出现的(例如John.)。。Doe@example.com不允许)。来源:本地部分(您称之为“用户名”)的开头或结尾不能有点“.”,除非它在引号中。如果Patterns.EMAIL\u地址是
    。email@domain.com
    是有效的,它违反了RFC规则:“句点(“.”)也可能出现,但不能用于启动或结束本地部分…”-android.util.Patterns.EMAIL\u地址也接受类似的内容test@t.t这绝对不是一个有效的电子邮件地址。只有一个字母的顶级域是不可能的。@Danielavadimirova,一个字母的TLD是有效的,它们只是还不存在。这种情况随时可能改变。看见