92

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

我将发送确认信息,以进行握手验证

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

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

我可以使用什么正则表达式来做到这一点?

4

5 回答 5

267

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

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

包含 @ 字符:

@

包含 @ 和它之后某处的句点:

@.*?\.

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

.+@.+\..+

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

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

用户 AmoebaMan17 建议进行此修改以消除空格:

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

并且只接受一个时期[外部编辑:不推荐,与有效的电子邮件地址不匹配]

^[^@\s]+@[^@\s\.]+\.[^@\.\s]+$
于 2009-04-12T23:01:47.953 回答
118
^\S+@\S+$
于 2009-04-12T21:23:26.987 回答
8

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$

  • 只有1个 @
  • 多个域和子域
于 2016-03-21T21:51:02.287 回答
4

我认为 AmoebaMan17 对表达式的这个小调整应该会阻止地址以点开头/结尾,并且还会阻止多个点彼此相邻。在消除常见问题的同时尽量不让它变得复杂。

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

它似乎正在工作(但我不是 RegEx-pert)。解决了用户从以句点结尾的句子末尾复制和粘贴电子邮件地址的问题。

即:这是我的新电子邮件地址 tabby@coolforcats.com。

于 2017-06-22T10:48:07.970 回答
1

任你选。

这是符合RFC 2822 第 3.4.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])+)\])

以防万一你好奇。:)

于 2009-04-12T23:40:18.237 回答