我们可以假设一个无效的电子邮件地址?

时间:2013-08-12 10:54:55

标签: javascript regex email-validation

我正在尝试验证电子邮件地址,但是我想要最宽松的验证,因为我打算通过向用户发送验证电子邮件来支持这一点(我知道这会得到很多问题,但其他问题主要集中在尽可能严格,而我试图找出最宽松的检查)。

我仍然认为通过某种程度的验证去除那些可能不是电子邮件地址的内容非常重要...我不希望"this is not @n email. fool"沾沾自喜地坐在我的数据库中假装是一封电子邮件。虽然我很高兴有"this.is.not.an.email@fool.com"

到目前为止,这是我的功能:

function validate(email) {
  var atIndex = email.lastIndexOf('@');
  // Make sure email contains an '@' character and that it is neither the first or last character
  if (atIndex > 0 && atIndex < email.length -1) {
    // Everything before the last '@' character
    var local = email.substring(0, atIndex);
    // Everything after the last '@' character
    var domain = email.substring(atIndex + 1, email.length);
    var dotIndex = domain.lastIndexOf('.');

    // Make sure domain contains a '.' character and that it is neither the first or last character
    if (dotIndex > 0 && dotIndex < domain.length - 1) {
      // Array of strings that aren't allowed to appear in a domain
      var domainRestrictions = [
        "..",
        " "
      ];
      var i = domainRestrictions.length;
      while (i-- > -1) {
        if (domain.indexOf(domainRestrictions[i]) > -1) {
          return false;
        }
      }
      // Array of strings that the local portion can neither start or end with
      var localRestrictions = [
        ".",
        " "
      ];
      i = localRestrictions.length;
      while (i-- > -1) {
        var string = localRestrictions[i];
        if (local.indexOf(string) == 0 || local.lastIndexOf(string) == local.length - 1) {
          return false;
        }
      }

      return true;
    }

  }
  return false;
}

目前我不允许以下内容:

  • 没有“@”符号的任何内容。
  • 任何不包含'。'的域名或者包含它作为第一个或最后一个字符。
  • 包含空格或“..”的任何域名以“。”开头或结尾的任何本地部分或空白

其他所有内容都被视为有效并传递。

我的问题是,是否有任何有效的电子邮件地址会阻塞?我可以做出更安全的假设,电子邮件地址不能包含吗?

3 个答案:

答案 0 :(得分:1)

如果您绝对有意拥有100%有效的电子邮件地址,对于初学者,我建议您阅读RFC 2822,可在http://tools.ietf.org/html/rfc2822#section-3.4.1找到。完整实施此规范将确保输入的所有电子邮件地址都采用完全有效的格式。这远远超出了最复杂的正则表达式所能达到的范围 - 例如,您可能会发现需要处理西里尔语,希腊语或Unicode字符集。

然而......

与您节省的时间相比,此规范的实施需要花费大量时间。即使电子邮件地址仍然是有效格式,仍然存在以下问题:

  • 域名可能未注册;
  • 域名可能没有MX记录;
  • 该域名可能没有A记录,作为后备;或者,
  • 用户可能实际上不存在。

坦率地说,不是花时间确保电子邮件地址严格遵守正确的格式,您可以更好地花时间确保它“足够好”并专注于验证过程的其他方面。

答案 1 :(得分:0)

如果你使用正则表达式,你会遇到很多麻烦。有电子邮件验证模式可验证您的电子邮件地址。

Pattern pattern = Pattern.compile("([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4})?");
Matcher matcher = pattern.matcher(yourEmailAddress);
if(matcher.matches()){
  //do something
}else {
  //tell the user it didn't match
}

答案 2 :(得分:0)

请在 -

查看一套详尽的规则

http://rumkin.com/software/email/rules.php