2016-08-05 20 views
1

ich diesen Code, der überprüft, ob eine E-Mail gültig ist:Wie überprüft man, ob eine Zeichenfolge eine E-Mail enthält?

$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."; 
} 

davon aus, dass ich die folgende Zeichenfolge habe unter:

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

Wie kann ich überprüfen, ob diese Zeichenfolge eine E-Mail hat oder nicht? (da es mit dem obigen Code nicht funktioniert)

+0

wie chris85 sagte; Das geht so: https://regex101.com/r/jC1tU9/1 –

Antwort

3

Die ^ und $ sind Anker, die die vollständige Übereinstimmung der Zeichenfolge erfordern. Wenn Sie das entfernen, wird eine E-Mail irgendwo in der Zeichenfolge übereinstimmen.

Regex Demo: https://regex101.com/r/xI0bC2/1

PHP Nutzung (mit aktualisiertem gefunden E-Mail speichern):

<?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 Demo: https://eval.in/618679

1

Es gibt keine wirkliche Lösung für dieses Problem, da Sie wird leicht falsch positiv erhalten.

Zunächst ist Ihr Muster zu naiv und stimmt nicht mit vielen richtigen E-Mail-Adressen überein. Ein Muster, das mit allen E-Mail-Adressen übereinstimmt, existiert jedoch nicht wirklich (oder ist zu kompliziert und ineffizient).

Ein Kompromiss besteht darin, alle Textknoten auszuwählen, die eine @ mit XPath enthält. Dann teilen Sie jeden Textknoten auf Leerstellen und Sie testen jeden Teil mit der integrierten E-Mail-Validierung PHP-Funktion: filter_var ($part, FILTER_VALIDATE_EMAIL)

Verwandte Themen