我有以下验证脚本部分:
$invalidEmailError .= "<br/>» You did not enter a valid E-mail address";
$match = "/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/";
这就是表达式,这是验证:
if ( !(preg_match($match,$email)) ) {
$errors .= $invalidEmailError; // checks validity of email
}
我认为这是足够的信息,请告诉我是否需要更多信息。
基本上,无论什么,“你没有输入有效的电子邮件地址”的消息会被回复。是否输入了正确的电子邮件地址或错误的电子邮件地址。
有没有人对于为什么有任何想法或线索?
编辑:我在localhost上运行它(使用Apache),这可能是preg_match无法正常工作的原因吗?谢谢! 阿米特
答案 0 :(得分:3)
您的正则表达式仅包含[A-Z]
,而不是[a-z]
。尝试
$match = "/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i";
使正则表达式不区分大小写。
您可以在http://regexpal.com上进行实时测试。
但是,我建议您尝试strager提到的页面上的一个表达式:http://fightingforalostcause.net/misc/2006/compare-email-regex.php。随着时间的推移,它们已经完善,可能会表现得更好。但Gmail用户会对您的用户感到满意,因为他们将能够使用被许多验证器错误拒绝的plus aliases。
答案 1 :(得分:1)
您可能从regular-expressions.info获得了正在使用的正则表达式。在该页面上,作者说明(重点补充):
如果您想使用上面的正则表达式,您需要了解两件事。首先,长正则表达式很难很好地格式化段落。所以我没有在三个角色类中的任何一个中包含a-z。 此正则表达式旨在与您的正则表达式引擎的“不区分大小写”选项一起使用。(您会惊讶地发现了多少“bug”报告。)其次,上面的正则表达式是用单词边界分隔,这使它适合从文件或更大的文本块中提取电子邮件地址。如果要检查用户是否输入了有效的电子邮件地址,请将字边界替换为字符串开头和字符串结尾锚点,如下所示:^ [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +。[AZ] {2,4} $
要解决此问题,请在正则表达式后添加i
PCRE标志。
答案 2 :(得分:0)
你总是可以尝试使用更简单的工具调试你的正则表达式(我非常喜欢用于此目的的Notepad ++)并执行迭代测试 - 即。使表达更复杂/更简单,看看是否修复/破坏了事情。