在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)
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)
更新@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)