【问题标题】:Non-Confusing Simple Validation of email in Java StringJava字符串中电子邮件的简单验证
【发布时间】:2011-08-06 14:40:29
【问题描述】:

我正在尝试寻找一种简单的方法来检查用户的输入是否符合电子邮件地址的几个标准。我已经阅读了有关此主题的许多主题,并且大多数似乎也想验证电子邮件地址。我不是想建立一些超级骗子电子邮件地址验证器/检查器。我正在尝试构建一个检查这些东西的方法:

  1. 用户输入的字符串包含“@”符号。
  2. “@”符号前至少有两个字符。
  3. 有一个'.'在 at 符号之后仅跟三个字符。域名可以任意长,但字符串必须以“._ _ _”结尾。如“.com”或“.net”...

我了解这不是一个包罗万象的电子邮件地址检查器。但这不是我想要的。我想要这么简单的东西。我知道这可能是一个常规问题,但即使在阅读了所有非常疯狂的验证电子邮件地址的方法之后,我也无法弄清楚。

这是我到目前为止的代码:(别担心,我已经知道它很可悲......)

public static void checkEmail()
{
    validEmail(emailAddresses);
    if(validEmail(emailAddresses))
    {

    }
}

public static boolean validEmail(String email) {
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{3}");
}

【问题讨论】:

  • 在这种情况下很难说什么是简单的。您发布了一些案例(包含@,包含之前/之后的另一个字符)。我会阅读规范并制作一个完整的正则表达式来验证它。
  • 只是对术语的说明:您不想查看电子邮件,而是要查看电子邮件地址。这不一样。
  • 另一个注意事项:有多个顶级域(museumaero)和少于两个(deus 等 - 所有国家代码顶级域,实际上)字母。 (而且我的大多数电子邮件地址都以.de 结尾。)
  • @Paŭlo Ebermann 感谢您的更正。我进行了必要的编辑以澄清原始问题。

标签: java string email-validation


【解决方案1】:

javax.mail 包为此提供了一个类:InternetAddress。使用this constructor,它允许您强制执行 RFC822 合规性。

【讨论】:

  • 不得不承认我比我更喜欢这个。
【解决方案2】:

不完美,但可以完成工作。

static boolean validEmail(String email) {
    // editing to make requirements listed
    // return email.matches("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}");
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{3}");
}

void checkEmails() {
    for(String email : emailAddresses) {
        if(validEmail(email)) {
             // it's a good email - do something good with it
        }
        else {
             // it's a bad email - do something... bad to it? sounds dirty...
        }
    }
}

【讨论】:

  • 也许你也可以添加小写?
  • 我可以。我可以添加很多东西。就像将每个 A-Z 更改为 A-Za-Z 一样简单(可能还有一些我不知道的捷径可以做得更好。)但是,OP 想要简单,他得到了简单。
  • @glowcoder 感谢您的帮助。我试图理解布尔代码的 email.matches 部分,我对如何将它合并到我的代码中感到有些困惑。我已将布尔代码作为单独的方法输入到我的代码中。现在我正在尝试编写“if”语句。我编辑了原始问题。
  • @glowcoder 我的问题是:如果电子邮件有效,返回 email.matches 会返回“true”,如果电子邮件无效,返回“false”?这样我上面代码的方向是正确的吗?
  • @glowcoder 谢谢。与此同时,我阅读了更多文档,并找到了另一种方法......同样的结果,只是另一种方式。感谢您的帮助。
【解决方案3】:
int indexOfAt = email.indexOf('@');
// first check : 
if (indexOfAt < 0) { 
  // error
}

// second check :
if (indexOfAt < 2) {
  // error
}

// third check :
int indexOfLastDot = email.lastIndexOf('.');
if (indexOfLastDot < indexOfAt || indexOfLastDot != (email.length() - 4)) {
  // error
}

阅读 http://download.oracle.com/javase/6/docs/api/java/lang/String.html 了解 String 方法的文档。

【讨论】:

  • 这允许不合规的test@foo@bar.com。它也不适用于不允许使用的字符,例如 ,&lt;&gt;` 及其同类。
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 2018-09-11
  • 2012-01-05
  • 1970-01-01
  • 2021-08-10
  • 2021-08-17
  • 2015-09-21
  • 2010-09-14
相关资源
最近更新 更多