正则表达式电子邮件 - 如何在电子邮件中允许加号?

Posted

技术标签:

【中文标题】正则表达式电子邮件 - 如何在电子邮件中允许加号?【英文标题】:Regex email - how to allow plus symbols in email? 【发布时间】:2012-01-12 06:17:52 【问题描述】:

我总是觉得正则表达式令人头疼,而谷歌搜索并没有真正的帮助。我目前正在使用以下表达式(preg_match):/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,3)$/

但是,如果我想允许带有加号的电子邮件,这显然是行不通的,例如:foo+bar@domain.com

我需要如何改变我的表达方式才能允许它?提前感谢所有帮助!

【问题讨论】:

您不应该使用正则表达式来验证电子邮件地址(除非您愿意妥协)请参阅this question 【参考方案1】:

尝试将\+ 添加到字符集合[] 中:

/^[_a-z0-9-]+(.[_a-z0-9-\+]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]2,3)$/

【讨论】:

【参考方案2】:

您的wrong 正则表达式可以更改为另一个wrong 正则表达式:

/^[\w-]+(\.[\w+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,3)$/

它允许在您想要的位置使用+ 字符。但无论如何,它是 wrong

【讨论】:

这是我第一次为 错误 的答案 +1 :)【参考方案3】:

您应该只使用 php 内置的正则表达式进行电子邮件验证,因为它涵盖了所有内容:

filter_var($email, FILTER_VALIDATE_EMAIL)

请参阅 filter_varFILTER_VALIDATE_EMAIL(或 https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L499 了解实际的野兽)。

【讨论】:

是的。这是一个很好的答案。 +1 如果您想知道,FILTER_VALIDATE_EMAIL 使用正则表达式。您可以在svn.php.net/viewvc/php/php-src/trunk/ext/filter/… 第 525 行看到它 谢谢 - 很棒的答案!但是,它仍然不能验证 foo+bar@domain.com 的例子——升级我的 php,所以希望它在最新的稳定版本中得到修复! 抱歉 - 它工作正常,我使用 $_GET 接收电子邮件 - 应该在 URI 中使用 %2b 而不是 +,filter_var 工作就像做梦一样!!! @SamGranger:这太奇怪了。刚刚使用 PHP 5.2.0(第一个具有 filter_var 功能的版本)进行了测试,它适用于我的设置。如果你有一个尾随换行符或其他东西,它可能只会失败。 --- 啊,哦,好吧,那好吧:]

以上是关于正则表达式电子邮件 - 如何在电子邮件中允许加号?的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 输入中允许特定格式的电子邮件地址

如何在我的谷歌脚本中允许 CORS 请求?

如何在 symfony2 验证器中允许空值

在 MVC 正则表达式中允许一些但不是所有的空格

为啥在未计算的操作数中不允许使用 lambda 表达式,但在常量表达式的未计算部分中允许使用 lambda 表达式?

如何在我的电子邮件验证中阅读正则表达式