关于c#:验证电子邮件不能盲目接受的最简单的正则表达式是什么?

What is the simplest regular expression to validate emails to not accept them blindly?

当用户在我的网站上创建一个帐户时,我想对电子邮件进行服务器验证,使其不接受每一个输入。

我将发送一个确认,以进行握手验证。

我在寻找一些简单的东西,不是最好的,但不是太简单,不能验证任何东西。我不知道限制必须在哪里,因为任何正则表达式都不会进行正确的验证,因为用正则表达式都不可能进行验证。

我试图限制正则表达式固有的sintax和视觉复杂性,因为在这种情况下,任何一个都是正确的。

我可以用什么regexp来做这个?


可以编写一个只接受符合标准的电子邮件地址的正则表达式。但是,有一些电子邮件地址没有严格遵守标准,但仍然有效。

下面是一些用于基本验证的简单正则表达式:

包含@字符:

1
@

包含@和后面的某个句点:

1
@.*?\.

在@之前、之前和之后至少有一个字符:

1
.+@.+\..+

只有一个@,@前、句点前和句点后至少有一个字符:

1
^[^@]+@[^@]+\.[^@]+$

用户amoebaman17建议修改以消除空白:

1
^[^@\s]+@[^@\s]+\.[^@\s]+$


1
^\S+@\S+$


我认为,对amoebaman17表达式的这个小小的调整应该会使地址从一个点开始/结束,同时也会使相邻的多个点停止。在消除一个共同问题的同时尽量不让它再次复杂化。

1
(?!.*\.\.)(^[^\.][^@\s]+@[^@\s]+\.[^@\s\.]+$)

它似乎在工作(但我不是雷杰克斯珀特)。修复了我对用户的问题从以句点结尾的句子中复制和粘贴电子邮件地址。

这是我的新电子邮件地址[email protected]


^[A-ZA-Z0-9+-]+@[A-ZA-Z0-9-]+[A-ZA-Z0-9-.]+$

  • 只有1个@
  • 几个域和子域

选你的。

这是一个符合RFC2822第3.4.1节…

1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

以防你好奇。:)