【发布时间】:2013-05-20 14:01:35
【问题描述】:
这是在 phpbb 中验证电子邮件地址的功能的一部分。 我有一个有效的电子邮件地址
"pwd-p&r2.coop@..." 但不被验证接受。
有趣的是,当我尝试“pwd-pr2.co&op@...”(在“点”之后带有“&”)时
和“pwd-pr&2coop@...”(不带“点”)都是有效的,
但“pwd-pr&2.coop@...”(在“&”之后有“点”)不是。
我已经尝试更改正则表达式好几天了,但仍然不知道如何修复它以便它接受我的电子邮件地址。
function get_preg_expression($mode)
{
switch ($mode)
{
case 'email':
// Regex written by James Watts and Francisco Jose Martin Moreno
// http://fightingforalostcause.net/misc/2006/compare-email-regex.php
return '([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*(?:[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]|&)+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,63})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)';
break;
}
}
【问题讨论】:
-
&不是正则表达式中的特殊字符,因此您不需要转义它 -
我无法确认,对我来说它也匹配
pwd-p&r2.coop@…。您使用什么正则表达式引擎(什么编程语言)?除了正则表达式之外,验证接受是否还有其他限制? -
@ted:不。那里提出的正则表达式显然与 OP 的有效地址不匹配。不如看看davidcel.is/blog/2012/09/06/…
-
@Bergi,是的,误解了 OP;删除
-
@Bergi:该函数位于另一个 php 文件中的“functions.php”中。我认为这里的问题是'&'相对于'dot'的位置如果只有其中一个存在或'&'在'dot'后面,它们是有效的
标签: regex