18

不确定是否有可用的解决方案但无法找到。于是又问了一遍。

我正在写一个电子邮件验证器。这应该验证所有格式正确的电子邮件(这只是检查电子邮件格式正确的一级验证)。现在,由于我的代码是国际代码,所以我也应该支持非拉丁字符。我如何为此编写最有效的正则表达式?

国际电子邮件:http ://en.wikipedia.org/wiki/International_email

一些示例电子邮件:

  1. 伊昭杰@邮件.商务
  2. राम@मोहन.ईन्फो</li>
  3. юзер@екзампл.ком
  4. θσερ@εχαμπλε.ψομ

它应该能够验证所有上述格式

4

4 回答 4

9

通过正则表达式进行电子邮件验证如此松懈的原因是它效率不高。有一个电子邮件地址语法规范,但检查它的正则表达式太长,不切实际。此外,电子邮件提供商在语法实现方面比实际规范更严格。一封电子邮件可能被认为是规范所说的有效,但根据提供商的说法是无效的。

这也是存在激活电子邮件的原因,因为检查电子邮件是否有效、现有和当前正在使用的唯一方法是向其发送一些东西,通常是唯一的激活码或链接。只有当使用仅发送到该电子邮件的唯一激活码或链接时,该电子邮件才会被视为有效。

在那之前,考虑一种更宽松的方法来验证电子邮件,检查用户名、the@和域部分。此外,为什么还要使用虚假电子邮件进行注册?如果他们这样做了,他们将无法获得激活链接,并且无法继续创建帐户。

于 2013-05-09T05:30:41.960 回答
4

@Patashu 非常感谢。我已经稍微改进了你的正则表达式,现在它绝对适合我的需要:

^([^@\s\."'\(\)\[\]\{\}\\/,:;]+\.)*[^@\s\."'\(\)\[\]\{\}\\/,:;]+@[^@\s\."'\(\)\[\]\{\}\\/,:;]+(\.[^@\s\."'\(\)\[\]\{\}\\/,:;]+)+$
于 2014-08-14T17:03:58.930 回答
0

在 Java 的情况下,这个对我来说效果很好。

"^[\\p{L}\\p{N}\\._%+-]+@[\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$"

它不允许在@ 之后使用IP,但xxx@xxx.TDL可以使用它验证来自的大多数有效电子邮件。 \p{L}验证 UTF-Letters 并\p{N}验证 UTF-Numbers。您可以查看此文档以获取更多信息。

于 2015-11-16T12:55:43.993 回答
-2

如果您在域和用户名中没有特殊字母、字符但有破折号(-)、数字,这对我使用 Python 有效。如果您有国家/地区扩展名,这也匹配。

[a-zA-Z0-9.-]+@[a-zA-Z-]+.(com|edu|net)(.([az]+))*

于 2019-07-09T15:40:52.267 回答