我正在尝试使用正则表达式验证电子邮件地址。这就是我现在所拥有的^([\ 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)* $我发现许多使用非捕获组的解决方案但不知道原因。你也可以告诉我这是否是正确的正则表达式,以及是否有任何有效的电子邮件没有被正确验证,反之亦然
答案 0 :(得分:2)
不要打扰,有很多方法可以验证电子邮件地址。自从internationalized domain names以来,列出TLD没有意义。另一方面,如果您想仅限于选择某些域,那么您就是在正确的轨道上。关于你的正则表达式:
.
几乎匹配任何内容,\.
匹配“。”[\w-]
(不带点),这对“@ mail.example.com”无效。我喜欢这个: /^.+@.+\...+$/
它测试任何东西,at符号,任意数量的任何东西,一个点,任何东西,以及任何数量的东西。这足以检查输入的电子邮件地址的一般格式。用户很可能会输入无法阻止的输入错误,例如键入john@hotmil.com
。他不会收到你的邮件,但你成功验证了他的地址格式。
回复您的评论:如果您使用(?:…)
代替(…)
而使用non-capturing group,则不会捕获匹配项。例如,所有电子邮件地址都有一个at符号,您无需捕获它。因此,(john)(?:@)(example\.com)
将提供名称和服务器,而不是at符号。非捕获组是正则表达式的可能性,它们与电子邮件验证无关。