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

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

我仍然认为有一定程度的验证是很重要的,可以删除那些不可能是电子邮件地址的东西......我不希望"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;
}

目前我禁止以下内容:

  • 没有'@'符号的任何东西。
  • 任何不包含'。'的域 或者包含它作为第一个或最后一个字符。
  • 任何包含空白或'..'的域任何以'。'开头或结尾的本地部分。 或空白
  • 其他一切都被认为是有效的并且被传递。

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


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

    但是...

    与您节省的时间相比,此规范的实施将花费大量时间。 即使电子邮件地址仍然处于有效格式,仍然存在一些问题,包括:

  • 该域名可能未被注册;
  • 该域可能没有MX记录;
  • 该领域可能没有A记录,作为退步; 要么,
  • 用户可能实际上不存在。
  • 坦率地说,与其花时间确保电子邮件地址严格遵守正确的格式,您的时间可能会更好地花在确保它“足够好”并专注于验证过程的其他方面。


    请检查一套详尽的规则 -

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


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

    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
    }
    
    链接地址: http://www.djcxy.com/p/92601.html

    上一篇: What can we assume is an invalid email address?

    下一篇: Best practices for email address validation (including the + in gmail addresses)