电子邮件正则表达式在某些电子邮件地址上失败


Email regex failing on certain email addresses

我使用以下代码从字符串中解析电子邮件:

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;
}

除了地址在域中有多个句号外,它工作得很好。所以johndoe@yahoo.com工作得很好,但是johndoe@yahoo.co.uk在johndoe@yahoo.co

我能改变什么来解决这个问题?

谢谢!

您可以在结尾前添加一个+,即+/i

相关文章: