可用于测试javascript验证脚本的电子邮件地址列表

可用于测试javascript验证脚本的电子邮件地址列表,javascript,validation,email,email-address,Javascript,Validation,Email,Email Address,有没有人有我可以用来测试JS地址验证脚本的电子邮件地址列表?我正在寻找一份尽可能完整的列表,以测试最常见的边缘情况,如果不是所有情况。根据RFC2822,示例有效 me@example.com a。nonymous@example.com 名字+tag@example.com 名字\@tag@example.com–这是一个包含两个@符号的有效电子邮件地址 空格\are\allowed@example.com “可引用空格”@example.com !#$%&'*+-/=^_`{|}~@[1.

有没有人有我可以用来测试JS地址验证脚本的电子邮件地址列表?我正在寻找一份尽可能完整的列表,以测试最常见的边缘情况,如果不是所有情况。

根据RFC2822,示例有效

  • me@example.com
  • a。nonymous@example.com
  • 名字+tag@example.com
  • 名字\@tag@example.com–这是一个包含两个@符号的有效电子邮件地址
  • 空格\are\allowed@example.com
  • “可引用空格”@example.com
  • !#$%&'*+-/=^_`{|}~@[1.0.0.127]
  • !#$%&'*+-/=^_`{}~@[IPv6:0123:4567:89AB:CDEF:0123:4567:89AB:CDEF]
  • me(这是一条评论)@example.com–RFC2822不鼓励但不禁止评论
根据RFC2822s,示例无效

  • 我@
  • @example.com
  • me.@example.com
  • 。me@example.com
  • me@example..com
  • 我。example@com
  • me\@example.com
发件人: 域部分(在最后一个@之后)是一系列字符串标签,由一个点分隔

每个标签是由1到63个八位字节组成的字符串,由a-Z、a-Z 0-9或连字符(-)组成

域的最大大小为255个八位字节

为了与arpanet兼容,每个标签必须以字母开头,以字母或数字结尾,但某些TLD:s现在允许全数字域,如0.nu

请注意,TLD允许为63个八位字节。很多scrips错误地将其限制为2-3个八位字节,这使得域名无效

例子

abcdefghijklmnopqrstuvxyz.abcdefghijklmnopqrstuvxyz.!#$%&'+-/=^`(124:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,中国政府部门,例如,例如,例如,政府,例如,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我的政府,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我的政府,我,我,我,我,我,我,我,我,我,我,我,我的政府,我,我,我,我,我,我,我,我,我,我的政府,我,我,我,我,我,我,我,我,我,我,我的政府,我.g6.h7.i8.j9.K0.L1.M2.N3.o.domain.name

(不,它没有注册)

更新: 使用IDNA,几乎所有事情都是可能的:

  • punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
  • idna_在清除(?)文本中@例子.测试.㵙㵙㵙㵙㵙㵙㶬ی
另见:

更新:Bobince建议测试域名中的点

摘要:仅测试域部分中的@和点,然后发送确认电子邮件

下面是一个测试@和点的示例:

  • 必须至少有一个@
  • 本地部分中必须至少有一个字符(位置>0)
  • 域部分中必须至少有一个点
  • 域部分必须至少包含4个字符
这里有一个简单的例子:

function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}
或者返回对象中的本地和域部分的函数(如果您想进一步处理它,例如将其转换为punycode)

功能电子邮件(地址){
var pos=地址。最后一个索引(“@”);
返回pos>0&&(address.lastIndexOf(“.”>pos)和&(address.length-pos>4)?
{
本地:地址.substr(0,位置<0?0:pos),
域:地址.substr(位置+1)
}:假;
}

我现在整理了来自Cal Henderson、Dave Child、Phil Haack、Doug Lovell和RFC 3696的测试用例

我对我能找到的所有验证器运行了所有这些测试。比较如下:

当人们增强验证器时,我会尽力使这个页面保持最新。感谢Cal、Dave和Phil在编写这些测试中提供的帮助和合作,以及对这些测试的建设性批评


人们尤其应该意识到这一点。其中三个规范示例实际上是无效地址。一个地址的最大长度是254或256个字符,而不是320个字符。

你认为应该补充一些。这里的任何人给你一个真实邮件的列表都是非常不礼貌的,而且可能是非法的。这里的结果栏中所有带有复选标记的都是有效的地址:测试“.”对于那些只发送没有TLD的“hotmail”的人也很有用。我认为,我们可以放心地假设,没有人会在TLD本身填写地址。我不确定在TLD上有地址是否合法。从技术上讲,这应该是可能的,但我不知道有谁拥有它。出于兴趣:@Dominc_Sayers在他的链接页面上评论说:“今天我发现有人在顶级域名上有一个工作电子邮件地址。换句话说,一个域名部分没有点的电子邮件地址。[…]他在乌克兰TLD.ua有一个地址。”@ptim有了所有新的TLD,有人在TLD上拥有电子邮件地址的可能性更大。要测试它是否可能是电子邮件地址,请检查@和(可选)通过punnycode将所有域部分转换为ASCII,并检查每个标签的长度。+1 |名称+tag@example.com这是一个我一直尝试使用的(阅读:Gmail过滤器),但对于几乎所有“自己滚”的网站来说都被归类为无效,而不考虑RFC2822。真让人生气!我example@com这是有效的。在这种情况下,提到的维基百科文章错误地解释了RFC2822。RFC2822使用增广的Backus-Naur形式表示域可以是(除其他外)
atom*(““atom”)
,并且根据所使用的Aug.BNF的样式,*表示在未另行指定的情况下,后面的任何内容的出现次数为0到无穷。因此,以下
(““atom”)部分是可选的。而且,作为me.example是电子邮件的有效本地部分,me。example@com也必须是可接受的。此外,以下内容(声称有效)无效:
name\@tag@example
空格\are\allowed@example.com
。这是RFC282的另一个错误解释。它并没有说你可以逃离@和空格来获得一封有效的电子邮件。事实上,它明确地说,它们必须被引用。说真的,你不能盲目相信维基百科,即使是现在。他们没有足够的资源来检查人们发布的内容。他们只是检查你有没有和参考
function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4) ? 
    {
        local:address.substr(0,pos < 0 ? 0 : pos),
        domain:address.substr(pos+1)
    }: false;
}