如何从长字符串中获取电子邮件地址

28 php string email

在PHP中,我有一个这样的字符串:

$string = "user@domain.com MIME-Version: bla bla bla";
Run Code Online (Sandbox Code Playgroud)

我如何才能获得电子邮件地址?有没有简单的方法来获得价值?

小智 42

在mandaleeka的答案的基础上,使用空间分隔符打破字符串然后使用filter_var进行清理然后验证以查看剩余的是否是合法的电子邮件地址:

function extract_email_address ($string) {
    foreach(preg_split('/\s/', $string) as $token) {
        $email = filter_var(filter_var($token, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
        if ($email !== false) {
            $emails[] = $email;
        }
    }
    return $emails;
}
Run Code Online (Sandbox Code Playgroud)

  • 失败的情况下的字符串:????`= UTF-8乙RXhwZXJ0IEFkdmlzb3I = =示例@ blahblah.com` (3认同)
  • 在Sachin kumar <admin@ram.com>上失败了 (2认同)

man*_*eka 26

如果您不确定以空格分隔的字符串的哪一部分是电子邮件地址,则可以按空格拆分字符串并使用

filter_var($email, FILTER_VALIDATE_EMAIL)
Run Code Online (Sandbox Code Playgroud)

在每个子字符串上.


小智 15

基于康斯坦丁正则表达式..也适用于IP地址域.

$pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";

//$pattern="/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/";

$subject="Hello a@b.com francis a@b words francisfueconcillo@gmail.com words 2 words123 francis@192.168.0.1";


preg_match_all($pattern, $subject, $matches);
Run Code Online (Sandbox Code Playgroud)


ora*_*eis 5

更新@Rob Locken的答案:

function extract_email_address ($string) {
   $emails = array();
   $string = str_replace("\r\n",' ',$string);
   $string = str_replace("\n",' ',$string);

   foreach(preg_split('/ /', $string) as $token) {
        $email = filter_var($token, FILTER_VALIDATE_EMAIL);
        if ($email !== false) { 
            $emails[] = $email;
        }
    }
    return $emails;
}
Run Code Online (Sandbox Code Playgroud)