我们都知道电子邮件地址验证是一个敏感的话题,关于在不编码整个 RFC 的情况下处理它的最佳方法有很多意见。但自 2009 年以来,它变得更加困难,我还没有真正看到有人解决 IDN 的问题。
这是我一直在使用的:
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}\z/i)
哪个适用于大多数电子邮件地址,但如果我需要匹配非拉丁电子邮件地址怎么办?例如:bob@china.中国,或 bob@russia.рф
在此处查看完整列表。(请注意列表底部的所有非拉丁语域扩展。)
可以在此处找到有关此主题的信息,我认为他们所说的是这些新字符将在机器级别上简单地读取为“.xn--fiqz9s”和“.xn--p1ai”,但我不是 100%当然。
如果是,这是否意味着我需要考虑在我的代码中进行以下唯一更改?(对于 .travelersinsurance 和 .sandvikcoromant 等域扩展名)
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,20}\z/i)
注意:这与此页面上的讨论无关使用正则表达式验证电子邮件地址