首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可用于测试javascript验证脚本的电子邮件地址列表

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

Stack Overflow用户
提问于 2008-11-18 00:01:50
回答 2查看 28.1K关注 0票数 20

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

EN

回答 2

Stack Overflow用户

发布于 2008-11-18 00:46:16

根据RFC2822有效的示例

  • me@example.com
  • a.nonymous@example.com
  • name+tag@example.com
  • name\@tag@example.com -这是包含两个@ symbols.
  • spaces\的有效电子邮件地址\ allowed@example.com
  • "spaces可能为quoted"@example.com
  • !#$%&'*+-/=.?^_`{|}~@1.0.0.127
  • !#$%&'*+-/=.?^_`{|}~@IPv6:0123:4567:89AB:CDEF:0123:4567:89AB:CDEF
  • me(this是一个评论)@example.com-RFC2822不鼓励但不禁止评论。

根据RFC2822s,无效的示例

  • me@
  • @example.com
  • me.@example.com
  • .me@example.com
  • me@example..com
  • me.example@com
  • me\@example.com

来自:http://en.wikibooks.org/wiki/JavaScript/Best_Practices

票数 29
EN

Stack Overflow用户

发布于 2008-11-18 02:42:34

域部分(在最后一个@之后)是一系列由点分割的字符串标签。

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

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

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

请注意,TLD允许为63个二进制八位数。许多脚本错误地将其限制为2-3个八位字节,从而使domain.name无效。

例如?

abcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZ.!#$%&'+-/=.?^`{|}~@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-0123456789.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.a-z.A-Z.0-9.a0.b1.c2.d3.e4.f5.g6.h7.i8.j9.K0.L1.M2.N3.O.domain.name

(不,它没有注册)

更新:使用IDNA几乎可以一切

  • punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
  • idna_in_clear(?)_text@例子.

测试.مثال.آزمایشی

另请参阅:

https://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation

http://www.leshazlewood.com/?p=5

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

总结:仅测试域名部分中的@和点,然后发送确认邮件。

下面是对@和点进行测试示例:

  • 必须至少有一个@
  • 在本地部分( pos >0)中必须至少有一个字符
  • 在域部分中必须至少有一个点
  • 域部分必须至少包含4个字符

下面是一个简单的例子:

代码语言:javascript
复制
function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}

或者返回对象中的本地和域部分的函数(如果您想进一步处理它,例如将其转换为punycode)

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/297420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档