JavaScript 中的电子邮件验证
有许多解决方案可用于在 JavaScript 中验证电子邮件地址,具体取决于您希望验证的严格程度。 在本教程中,您将了解 3 种不同的选项以及它们之间的权衡。
1. 编写你自己的正则表达式
快速简便的方法是编写一个正则表达式来验证字符串是否是格式正确的电子邮件地址。 我过去使用的一种简单方法是检查字符串是否看起来像 xx@yy.zz
:
/^[^@]+@\w+(\.\w+)+\w$/.test(str);
这个正则表达式相当简洁,可以处理许多常见的情况。 如果您不需要对验证特别严格,此正则表达式可能会有所帮助。
/^[^@]+@\w+(\.\w+)+\w$/.test('foo@bar.co'); // true
/^[^@]+@\w+(\.\w+)+\w$/.test('foo.bar@baz.co'); // true
/^[^@]+@\w+(\.\w+)+\w$/.test('foo@bar.c'); // false, TLD must be at least 2 chars
/^[^@]+@\w+(\.\w+)+\w$/.test('foo@bar'); // false
/^[^@]+@\w+(\.\w+)+\w$/.test('bar.co'); // false
但是,上面的正则表达式没有考虑到许多规则。 例如,电子邮件地址的 个人信息 部分(@ 之前的所有内容)不能包含方括号 []
。有 更复杂的正则表达式 可以处理大多数边缘情况,例如:
/^[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/
然而,这个正则表达式仍然不能处理所有的边缘情况。 例如,电子邮件地址的个人信息部分不能超过 64 个字符。 因此,编写自己的电子邮件验证正则表达式通常不是一个好的选择,除非您确定只想快速抽查电子邮件是否有效。
2. 使用 npm 模块
的 email-validator npm 模块检查字符串是否是语法上有效的电子邮件地址。 它处理一些正则表达式无法检查的规则,例如:
const { validate } = require('email-validator');
validate('foo@bar.co'); // true
validate('this-personal-info-is-too-long-it-must-be-less-than-64-characters@bar.co'); // false
电子邮件验证器模块在大多数情况下都是一个不错的选择。 它处理复杂的正则表达式和各种规则,因此您不必这样做。 您应该使用 email-validator 或类似的东西,除非您有令人信服的理由来编写自己的正则表达式。
3. 使用 API
正则表达式和电子邮件验证器仅检查电子邮件地址的 语法 ,而不检查它是否是实际电子邮件地址。 例如, foo@bar.baz
是语法上有效的电子邮件地址,但从 Mailgun 向该 将失败,因为 baz
不是有效的 TLD。
有几个 API 用于验证电子邮件地址,例如 Mailgun 和 Kickbox 。 这些 API 通过与实际邮件服务器通信并验证电子邮件是否存在来执行附加验证。
例如,您可以使用 Axios 根据 Kickbox 的验证 API 验证电子邮件:
const email = 'notexist@karpov.io';
const apiKey = 'your key here';
const res = await axios.get('https://api.kickbox.com/v2/verify', { params: { email, apiKey } });
res.data.result; // 'undeliverable', because the email address doesn't exist
这些 API 也不是万无一失的:一些邮件服务器不允许 Mailgun 或 Kickbox 等工具检查单个电子邮件地址是否存在,以阻止电子邮件抓取。 但是,如果您想绝对确定用户使用有效的电子邮件进行注册,并且您愿意为最大限度地提高交付率而付费,那么使用 API 是一个不错的选择。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 在 JavaScript 中上传文件
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论