首页 > 解决方案 > 电子邮件验证通过,无需域扩展

问题描述

Aurelia-Validation在我的项目中使用并尝试验证电子邮件地址。当我添加电子邮件example@g时,它通过了验证。电子邮件验证最后不应该有.com, .net, etc 扩展名以通过验证吗?以plunker链接为例。

这是显示我的意思的屏幕截图:

2018-04-25 10_09_35-plunker

标签: aurelia

解决方案


这有点挑剔,但就像 emix 在评论中已经指出的那样,所使用的验证正则表达式目前是WHATWGaurelia-validation指定的被广泛接受的标准。这与MDNw3.org上记录的正则表达式相同。

Mozilla似乎input type="email"至少遵循此规范进行验证。不过,我在 chrome 或 edge 上找不到任何官方资源。

该正则表达式的 JavaScript 版本是:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

简单来说,这转化为:

  1. (必需)在@符号之前,任意数量的字母数字字符和(某些)符号
  2. (必需)在@符号之后,介于 1 到 63 个字母数字字符或连字符之间(不能以连字符开头或结尾)
  3. (可选)与 2 相同(但以句点开头),重复任意次数

如果您想将此验证限制为可在 Internet 中路由的电子邮件,只需*将正则表达式末尾的星号更改为加号即可+。这使正则表达式保持相同,除了现在必须至少有一个以句点开头的段。

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/

推荐阅读