正则表达式电子邮件 - 如何在电子邮件中允许加号?
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_var
和 FILTER_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
功能的版本)进行了测试,它适用于我的设置。如果你有一个尾随换行符或其他东西,它可能只会失败。 --- 啊,哦,好吧,那好吧:]以上是关于正则表达式电子邮件 - 如何在电子邮件中允许加号?的主要内容,如果未能解决你的问题,请参考以下文章