电子邮件正则表达式失败对某些电子邮件地址
问题描述:
我使用这个代码从字符串中解析出电子邮件:电子邮件正则表达式失败对某些电子邮件地址
function get_emails ($str) {
$pattern = '/([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)/i';
preg_match ($pattern, $str, $matches);
return $matches;
}
它运作良好,除非地址在域超过一个周期。所以[email protected]工作正常,但[email protected] GET剪辑在[email protected]
我能更改为解决这一问题?
谢谢!
答
你可以添加一个+
结束前,即+/i
。
如果您的电子邮件正则表达式长度小于几千个字符,则不正确。 – hobbs 2013-03-25 18:03:46
我的地方发现这个堆栈溢出。它与多个句:'([A-Z0-9 ._% - ] + @ [A-Z0-9 .-] + \ [AZ] {2,4})' – 2013-03-25 18:05:27
您还假定名称和域是英语! a-z可怜的老蕾妮会心烦意乱http://en.wikipedia.org/wiki/Internationalized_domain_name – Waygood 2013-03-25 18:06:16