2016-08-05 8 views
1

私はメールが有効であるかどうかを確認するこのコードを持っている:文字列に電子メールが含まれているかどうかを確認する方法は?

$email = "[email protected]"; 
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
if (preg_match($regex, $email)) { 
echo $email . " is a valid email. We can accept it."; 
} else { 
echo $email . " is an invalid email. Please try again."; 
} 

は、私は以下の次の文字列を持っていると仮定:

<html> 
<body> 
<p>[email protected]</p> 
</body> 
</html> 

その文字列が電子メールであるかそうでないかをどのように確認することができますか? (上記のコードでは機能しないため)

+0

chris85のように、次のようにします:https://regex101.com/r/jC1tU9/1 –

答えて

3

^$は完全な文字列一致が必要なアンカーです。それを取り除くと、文字列のどこかの電子メールにマッチします。

正規表現のデモ:https://regex101.com/r/xI0bC2/1

PHPの使い方(ストアに更新したメールを見つけた):

<?php 
$email = "<html> 
<body> 
<p>[email protected]</p> 
</body> 
</html>"; 
$regex = '/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/'; 
if (preg_match($regex, $email, $email_is)) { 
echo $email_is[0] . " is a valid email. We can accept it."; 
} else { 
echo $email . " is an invalid email. Please try again."; 
} 

PHPデモ:https://eval.in/618679

1

がこの問題の真の解決策は、あなたのために、ありません偽陽性を容易に得ることができる。

あなたのパターンはあまりにも素朴で、正しい多くのメールアドレスと一致しません。しかし、すべての電子メールアドレスに一致するパターンは実際には存在しません(またはあまりにも複雑で非効率です)

XPathを使用して@を含むすべてのテキストノードを選択するのが妥協です。次に、各テキストノードを空白で分割し、ビルドイン電子メール検証PHP関数で各部分をテストします。filter_var ($part, FILTER_VALIDATE_EMAIL)

関連する問題