使用正则表达式验证电子邮件地址。

时间:2015-07-24 20:38:41

标签: regex validation

我正在尝试使用正则表达式验证电子邮件地址。这就是我现在所拥有的^([\ w - 。] +)@([\ w - ] +)。(aero | asia | be | biz | com.ar | co.in | co.jp | co.kr | co.sg | COM | com.ar | com.mx | com.sg | com.ph | co.uk |鸡舍|代| EDU | FR | GOV |中|资讯|人才招聘|密|牧高笛|博物馆|名| net | net.mx | org | ru)* $我发现许多使用非捕获组的解决方案但不知道原因。你也可以告诉我这是否是正确的正则表达式,以及是否有任何有效的电子邮件没有被正确验证,反之亦然

1 个答案:

答案 0 :(得分:2)

不要打扰,有很多方法可以验证电子邮件地址。自从internationalized domain names以来,列出TLD没有意义。另一方面,如果您想仅限于选择某些域,那么您就是在正确的轨道上。关于你的正则表达式:

  • 你必须逃避点,以便它们成为文字:.几乎匹配任何内容,\.匹配“。”
  • 在域部分中,使用[\w-](不带点),这对“@ mail.example.com”无效。
  • 你可能应该看看at the duplicate answer
  • This article向您展示了一个可怕的,但RFC 5322兼容的正则表达式,但也告诉您不要使用它。

我喜欢这个: /^.+@.+\...+$/ 它测试任何东西,at符号,任意数量的任何东西,一个点,任何东西,以及任何数量的东西。这足以检查输入的电子邮件地址的一般格式。用户很可能会输入无法阻止的输入错误,例如键入john@hotmil.com。他不会收到你的邮件,但你成功验证了他的地址格式。

回复您的评论:如果您使用(?:…)代替(…)而使用non-capturing group,则不会捕获匹配项。例如,所有电子邮件地址都有一个at符号,您无需捕获它。因此,(john)(?:@)(example\.com)将提供名称和服务器,而不是at符号。非捕获组是正则表达式的可能性,它们与电子邮件验证无关。