什么是最简单的正则expression式来validation电子邮件不盲目接受他们?

当用户在我的网站上创build一个帐户时,我想对电子邮件进行服务器validation,以便不接受每个input。

我会发送一个确认,以一种握手validation的方式 。

我正在寻找一些简单的,不是最好的 ,但不是太简单,不validation任何东西。 我不知道限制必须在哪里,因为任何正则expression式不会做正确的validation,因为不可能用正则expression式来做。

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

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

^\S+@\S+$ 

可以编写一个只接受遵循标准的电子邮件地址的正则expression式。 但是,有一些电子邮件地址不严格按照标准,但仍然工作。

这里有一些简单的基本validation正则expression式:

包含@字符:

 @ 

包含@和一段时间之后的某个时期:

 @.*?\. 

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

 .+@.+\..+ 

在@之前和之后只有一个@,@之前的至less一个字符:

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

用户AmoebaMan17build议这种修改来消除空白:

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

拿你的select。

这是一个符合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])+)\]) 

以防万一,你好奇。 🙂

我觉得AmoebaMan17对这个表情的小小的改动应该是停止一个点的开始/结束,也会停止多个点的相邻。 尽量不要让它变得复杂,同时消除一个共同的问题。

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

它似乎工作(但我不是RegEx-pert)。 修复了我的问题,用户在句子结尾处复制并​​粘贴电子邮件地址。

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

^ [A-ZA-Z0-9 _ + – ] + @ [A-ZA-Z0-9 – ] + [A-ZA-Z0-9 – ] + $

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

“^ \ W [^ @] * @ \ W [^ @。] +。\ W [^。] {2,4} $”。 不允许超过一个@或期限,到目前为止效果很好。

另外,要testing不同的正则expression式,请从http://www.ultrapico.com/下载Expresso。; 这真的帮了我。