Question

Je mettais juste la validation d'une forme dans laquelle j'ai décidé d'essayer d'utiliser la fonction filter_var pour vérifier la validité de mon adresse e-mail. Je ne peux pas savoir ce qui filter_var permet réellement partout bien (puisque la documentation est très simple), et je trouve que ce permet à une adresse e-mail comme essai @ test. Ne pas là pour être .com, .net, etc ... dans le domaine?

Était-ce utile?

La solution

Le comportement a changé quelque part Avril. Voir bug # 49576 et révision 297350 .

Ce courriel est vraiment invalide, ou tout au moins c'est ce que les développeurs PHP compris. La source porte cet avis:

/*
 * The regex below is based on a regex by Michael Rushton.
 * However, it is not identical.  I changed it to only consider routeable
 * addresses as valid.  Michael's regex considers a@b a valid address
 * which conflicts with section 2.3.5 of RFC 5321 which states that:
 *
 *   Only resolvable, fully-qualified domain names (FQDNs) are permitted
 *   when domain names are used in SMTP.  In other words, names that can
 *   be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
 *   in Section 5) are permitted, as are CNAME RRs whose targets can be
 *   resolved, in turn, to MX or address RRs.  Local nicknames or
 *   unqualified names MUST NOT be used.

Le changelog mentionne ce bogue correctif pour PHP 5.3.3 et PHP 5.2.14.

Autres conseils

Il est une adresse e-mail valide. Il ne va pas travailler sur Internet (au moins, pas aujourd'hui), mais il est très bien pour une adresse locale.

Je suppose que les développeurs prennent l'approche raisonnable de vérifier les adresses e-mail et ne pas se construire un système qui est garanti pour sortir de ce jour dès qu'un nouveau TLD est introduit. Nous avons assez adresse email contrôleurs de syntaxe qui rejettent foo@example.museum comme il est.

Test @ test est syntaxiquement valide.

De la RFC 5321:

  

Dans le cas d'un domaine de niveau supérieur utilisé par lui-même dans une adresse e-mail, une seule chaîne est utilisée sans points.

Seulement après-t-il dit:

  

Seuls résoluble noms de domaine entièrement (FQDN) sont autorisés      lorsque les noms de domaine sont utilisés dans SMTP. Autrement dit, les noms qui peuvent      être résolu de MX RI ou l'adresse (à savoir, A ou AAAA) RI (comme discuté      à la section 5) sont autorisés, tout comme les CNAME dont les objectifs peuvent être      résolu, à son tour, à MX ou d'adresse RRs. surnoms locaux ou      noms non qualifiés NE DOIVENT PAS être utilisés.

Cela n'empêche pas nécessairement les noms de domaine TLD uniquement. En fait, exécutez le code suivant:

checkdnsrr('ua', 'MX') // Returns true

getmxrr('ua', $array) // Returns true

Les noms TLD-seul domaine (peut) ont des enregistrements MX et sont utilisé: http: / /www.to/ est un exemple. Et voici quelques adresses e-mail valides nom de domaine TLD uniquement:

vince @ Ai

paul @ io

root @ km

@ joost tk

admin @ tt

hostmaster @ ua

Source d'adresses e-mail par exemple: Tony Finch - TLDs avec MXs

Non, test peut être un domaine de réseau local / interne, de sorte que cela fonctionne. Je l'aime qu'il valide correctement wrikken@localhost lors du développement par exemple.

Une nonexistentdomain.foo normale aurait le même problème. Si vous voulez vérifier si quelque chose est delivarable à un hôte, l'utilisation getmxrr (et qui ne réussit pas revenir à gethostbyname()).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top