Comment valider une adresse e-mail en PHP
J'ai cette fonction pour valider une des adresses email:
function validateEMAIL($EMAIL) {
$v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";
return (bool)preg_match($v, $EMAIL);
}
Est-ce possible de vérifier si l'adresse email est valide ou pas?
- Si cela fonctionne, il fonctionne. Vous ne pouvez pas vraiment faire mieux, c'est trop petit. Seule chose qui n'est pas bon est le style.
validateEmail
serait corret, ainsi que de la transmettre$email
, pas$EMAIL
. - Voulais juste m'assurer que je n'ai pas eu de problèmes majeurs dans le code c'est tout 🙂
- Voir aussi stackoverflow.com/questions/201323/... pour en savoir plus sur la façon et la manière de ne pas utiliser des expressions régulières pour valider les adresses e-mail.
- En refusant de valider de nombreuses adresses e-mail valides. Par exemple *@example.com ou '@example.com ou moi@[127.0.0.1] ou vous@[ipv6:08B0:1123:AAAA::1234]
- stackoverflow.com/a/13494216/22470
- non pas que je suis en recommandant que les regex, mais au moins on peut espérer à toute personne d'utiliser ces adresses pour chanter etc ne vous plaignez pas quand il tombe en panne 🙂
- stackoverflow.com/questions/28026060/...
- Voir la réponse complète ici: pour PHP 5.x stackoverflow.com/questions/19522092/...
- Si vous voulez vraiment utiliser les regex, vous devez déplacer le "-" au début du jeu de caractères pour éviter les erreurs:
[-a-zA-Z0-9_.+]
(si ce n'est pas au début, le "-" est interprété comme la gamme). - Avez-vous essayé anti-rebond.io ?
Vous devez vous connecter pour publier un commentaire.
La méthode la plus simple et la plus sûre façon de vérifier si une adresse email est bien formé est d'utiliser le
filter_var()
fonction:En outre, vous pouvez vérifier si le domaine définit un
MX
enregistrement:Mais ce n'est toujours pas garantie que la poste existe. La seule façon de le savoir est par l'envoi d'un mail de confirmation.
Maintenant que vous avez votre réponse facile n'hésitez pas à lire sur le sujet de l'email de validation d'adresse si vous tenez à le savoir, ou sinon il suffit d'utiliser la réponse rapide et de progresser. Sans rancune.
Pour tenter de valider une adresse e-mail à l'aide d'une expression régulière est un "impossible" de la tâche. J'irais jusqu'à dire que cette regex vous avez fait est inutile. Il y a trois rfc concernant emailaddresses et écrire une regex pour attraper mal emailadresses et en même temps de ne pas avoir de faux positifs est quelque chose qu'aucun mortel ne peut le faire. Découvrez cette liste pour les tests (à la fois échoué et réussi) de l'expression régulière utilisée par PHP
filter_var()
fonction.Même intégré dans les fonctions de PHP, par courriel les clients ou les serveurs ne pas l'obtenir. Toujours dans la plupart des cas
filter_var
est la meilleure option.Si vous voulez savoir ce que les regex modèle de PHP (pour l'instant) pour valider les adresses e-mail voir les sources de PHP.
Si vous voulez en savoir plus sur les adresses e-mail, je vous suggère de commencer à lire les specs, mais je dois vous avertir qu'il n'est pas facile à lire par un tronçon:
Noter que
filter_var()
est comme déjà indiqué uniquement disponible depuis PHP 5.2. Dans le cas où vous voulez qu'il fonctionne avec les versions précédentes de PHP, vous pouvez utiliser les regex en PHP:P. S. Une note sur l'expression régulière pattern utilisé ci-dessus (à partir de la source en PHP). Il semble qu'il y a un copyright de Michael Rushton. Comme l'a déclaré: "n'hésitez pas à utiliser et redistribuer ce code. Mais gardez cela à l'avis de droit d'auteur."
regex
qui permettrait de contrôler pour les non-standard, UTF-8 acceptée adresses e-mail: stackoverflow.com/a/20992349/1455661$email = '"><script>alert(1);</script>"@test.com'; echo filter_var($email, FILTER_VALIDATE_EMAIL)
filter_var
n'est pas vraiment une option dans "moderne" applications - il ne supporte pas l'utf-8, qui a été admis pour un certain temps dans la partie locale d'adresses e-mail.filter_var
sera à la traîne en très peu de temps, même si ils vont changer dès maintenant (j'ai posté un rapport de bug).Vous pouvez utiliser filter_var pour cela.
Dans mon expérience,
regex
solutions ont beaucoup trop de faux positifs et defilter_var()
solutions de faux négatifs (surtout avec tous les nouveaux Tld).Au lieu de cela, il est préférable de s'assurer que l'adresse a tous les éléments nécessaires d'une adresse e-mail (utilisateur, le symbole"@", et le domaine), puis vérifier que le domaine lui-même existe.
Il n'existe aucun moyen pour déterminer (côté serveur) si un e-mail de l'utilisateur d'un domaine externe.
C'est une méthode que j'ai créé dans une classe Utilitaire:
Je pense que vous feriez mieux d'utiliser PHP intégré les filtres - dans ce cas particulier:
Il peut renvoyer une valeur vrai ou faux lorsqu'il est fourni avec le
FILTER_VALIDATE_EMAIL
param.Ce ne sera pas seulement de valider votre adresse email, mais aussi de désinfecter pour des caractères inattendus:
Répondu présent en haut de la question " à propos d'e-mails de vérification https://stackoverflow.com/a/41129750/1848217
Donc, il suffit de cocher @, note de l'utilisateur sur le frontend et envoyer des emails de vérification sur l'adresse donnée.
@
, mais il n'a pas vraiment vérifier que c'est valable pour tout les Rfc qui régissent e-mail. Il également n'a pas écrit. J'ai couru à travers regex101.com et il a omis de faire correspondre les adresses valides/^[^@]+@[^@+]$/
à/^[^@]+@[^@]+$/
filter_var
méthode? Il ne résout pas le problème de l'acceptation mal formaté adresses. Votre regex sera heureux d'accepter lesjoe@domain
comme une adresse de courriel valide, quand il n'est pasfilter_var($email, FILTER_VALIDATE_EMAIL, $newOptions)
. Mais vous avez de vieilles fonction sur le serveur, vous ne pouvez pas mettre à jour dans certains cas. Et vous risquez de perdre des clients avec de nouveaux e-mails valides. Aussi, une fois de plus, je remarque que tous les e-mail-servir la coupe de travaux strictement en conséquence à la commune et moderne standard d'adresses email.Si vous êtes simplement à la recherche pour un regex qui permet divers points, des traits de soulignement et des tirets, comme suit:
[a-zA-z0-9.-]+\@[a-zA-z0-9.-]+.[a-zA-Z]+
. Qui va permettre à une assez stupide à la recherche de courriel commetom_anderson.1-neo@my-mail_matrix.com
pour être validé.Si vous voulez vérifier si fourni de domaine de l'adresse email est valide, utilisez quelque chose comme:
C'est pratique pour filtrer beaucoup d'adresses e-mail invalides, avec le standart l'email de validation, raison valable format d'e-mail ne signifie pas valide e-mail.
Noter que
idn_to_ascii()
(ou sa sœur fonctionidn_to_utf8()
) fonction peut pas être disponible dans votre installation de PHP, il nécessite des extensions PECL intl >= 1.0.2 et PECL idn >= 0.1.Également garder à l'esprit que l'IPv4 ou IPv6 en tant que partie de domaine dans l'e-mail (par exemple
user@[IPv6:2001:db8::1]
) ne peut pas être validé, seulement nommé hôtes peuvent.Voir plus ici.
Après avoir lu les réponses ici, c'est ce que j'ai:
De nos jours, si vous utilisez un formulaire HTML5 avec
type=email
, alors vous êtes déjà en sûre à 80% depuis le navigateur moteurs ont leur propre programme de validation. Pour la compléter, ajouter cette regex pour votrepreg_match_all()
et le nier:Trouver l'expression régulière utilisée par les formulaires HTML5 pour la validation
https://regex101.com/r/mPEKmy/1