2011-11-05 84 views
0

我目前使用这个表达式在我的PHP脚本来验证电子邮件地址:正则表达式类型的区别?

preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $string, $matches); 

问题是,这个特定的正则表达式是不可靠的,经常发现一些假阳性。

我在看regexlib.com找到一个更好的,但我从那个网站得到的人都没有找到匹配。

例如:

preg_match_all("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", $string, $matches); 

觉得没有什么,即使它应该根据regexlib工作。我已经尝试了regexlib中用于电子邮件验证的前10个正则表达式,并且它们都不起作用。难道我做错了什么?

链接regexlib电子邮件分类:http://regexlib.com/DisplayPatterns.aspx?cattabindex=0&categoryId=1

感谢,

回答

3

你的第二个正则表达式失败,因为你需要添加delimiters在PHP中:

"/([0-9a-zA-Z]...<snip>...[a-zA-Z]{2,9})/" 
^         ^
here        here 

(我也删除了^$为马里奥指出。)

你可以尝试一种不同的方法你gh:

  1. 使用一个非常简单的正则表达式来查找看起来可能是电子邮件地址的任何内容。在这里允许误报是可以的,只要确保你不会错过任何。
  2. 对于您在上面找到的每个电子邮件地址候选人,请对照适当的电子邮件地址验证程序进行检查,以确定它是否实际上是有效的电子邮件地址。使用这个阶段去除误报。

相关

相关问题