私は現在、メールアドレスを以下の正規表現と照合しています(そしてそれらをリンクとしてmailto
リンクしています):
/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,64})/
mailto
ただし、以前にリンクとして、または既存のリンク (例: index.php?email=example@example.com) 内で既にリンクされているものはリンクしたくありません。
<a href="mailto:<a href="mailto:example@example.com">example@example.com</a>"><a href="mailto:example@example.com">example@example.com</a></a>
アップデート
これは私がメールアドレスを見つけるために使用しているPHPの例です(申し訳ありませんが、必要だとは思いませんでした):
$input = "example@example.com<br><br><a href='mailto:example@example.com'>test email</a><br><br><a href='mailto:example@example.com'>example@example.com</a>";
$output = preg_replace("/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,64})/i", "<a href='mailto:$1'>$1</a>", $input);
//output
<a href="mailto:example@example.com">example@example.com</a><br><br><a mailto:example@example.com'="" href="mailto:<a href=">example@example.com</a>'>test email<br><br><a mailto:example@example.com'="" href="mailto:<a href=">example@example.com</a>'><a href="mailto:example@example.com">example@example.com</a>
更新 2
さらに正規表現の質問があります(可能であれば)-すべてのリンクを新しいウィンドウにターゲットにするための以下の正規表現もありますが、リンクされたものを新しいウィンドウに移動させたくありません-リンクmailto
をターゲットにしないことは可能ですかmailto
?
$output = preg_replace("/<(a)([^>]+)>/i", "<\\1 target=\"_blank\"\\2>", str_replace('target="_blank"', '', $output));