可用于测试javascript验证脚本的电子邮件地址列表
有没有人有我可以用来测试JS地址验证脚本的电子邮件地址列表?我正在寻找一份尽可能完整的列表,以测试最常见的边缘情况,如果不是所有情况。根据RFC2822,示例有效可用于测试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.
- 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不鼓励但不禁止评论
- 我@
- @example.com
- me.@example.com
- 。me@example.com
- me@example..com
- 我。example@com
- me\@example.com
- punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
- idna_在清除(?)文本中@例子.测试.㵙㵙㵙㵙㵙㵙㶬ی
- 必须至少有一个@
- 本地部分中必须至少有一个字符(位置>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;
}