什么是最简单的正则表达式来验证电子邮件是否盲目接受它们?

eKe*_*ek0 74 c# regex email-validation

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

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

我正在寻找简单东西,而不是最好的东西,但不是太简单,不能验证任何东西.我不知道限制必须在哪里,因为任何正则表达式都不会执行正确的验证,因为无法使用正则表达式执行此操作.

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

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

Guf*_*ffa 216

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

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

包含@字符:

@
Run Code Online (Sandbox Code Playgroud)

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

@.*?\.
Run Code Online (Sandbox Code Playgroud)

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

.+@.+\..+
Run Code Online (Sandbox Code Playgroud)

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

^[^@]+@[^@]+\.[^@]+$
Run Code Online (Sandbox Code Playgroud)

用户AmoebaMan17建议这种修改以消除空白:

^[^@\s]+@[^@\s]+\.[^@\s]+$
Run Code Online (Sandbox Code Playgroud)

  • 如果您看看RFC 6531中的内容,如果您仔细查看RFC 3696,您可能会得出结论,验证电子邮件的唯一方法是发送确认电子邮件.我认为在电子邮件地址上使用正则表达式的真正重点应该是帮助用户防止打字错误,这就是像这样的简单正则表达式发挥作用的地方. (5认同)
  • 是的,不要用最后一个。它与很多有效选项不匹配。例如,me@provider.co.uk。 (4认同)
  • 为了防止字符串以句点结尾,我做了这样的修改:^[^@\s]+@[^@\s]+\.[^@\.\s]+$ (2认同)

cha*_*aos 85

^\S+@\S+$
Run Code Online (Sandbox Code Playgroud)

  • 它应该是一个最简单,非常粗糙的过滤器,我不明白为什么加倍的时期比所有其他具有类似复杂性成本的螺旋上升特权来覆盖它们. (53认同)
  • +1试图通过正则表达式完全"验证"电子邮件地址是一个愚蠢的错误.这可以捕捉最简单的错误类型; 其余的可以通过尝试发送邮件找到.上面还允许使用Unicode( - > Punycode)域,其中大多数"聪明"的正则表达式都失败了. (8认同)
  • 这将匹配无效的地址。任何正则表达式都可以,但是该正则表达式可以匹配常见的拼写错误,例如test @ stackoverflow..com(请注意双点。)请提供一个更好的示例。 (2认同)
  • +1。无论如何,这是一个主观问题,这很简单。 (2认同)
  • 是的,如果你不想使用完整的验证正则表达式,这是一个很好的简单近似 (2认同)
  • 此时相当旧,但你可以考虑字符串的开始/结束,而不是行的开始/结束[如此](http://rubular.com/r/3L4drZmgoz)`\ A\S + @\S +\z ` (2认同)

cot*_*oto 7

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

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

  • 这在“O'Connor@example.com”和许多其他网站上都会失败。撇号和其他字符在电子邮件中比您想象的更常见,尤其是在美国以外的地区。我建议不要使用这个正则表达式。 (2认同)