Pourquoi HTML5 formulaire de validation permettre les e-mails sans dot?
Je suis en train d'écrire un très simple mock-up pour démontrer certaines HTML5 forme de validation. Cependant, j'ai remarqué que l'e-mail de validation de ne pas vérifier un point dans l'adresse, ni vérifier les caractères suivant la dot.
En d'autres termes, "john@doe" est considéré comme valide, lorsque c'est clairement pas une adresse de courriel valide; "doe" n'est pas un domaine.
C'est comment je code mon champ e-mail:
<input type="email" required />
Est-ce pas suffisant?
Cochez cette violon pour voir ce que je veux dire.
Note: je sais comment faire cela via une RegEx motif de la place. Je me demande comment quelqu'un pourrait s'en tirer avec l'aide de l'e-mail type à la place.
In other words, "john@doe" is considered valid, when it's clearly not a valid email address; doe isn't a domain.
Oui,doe
peut certainement être un domaine (pensezlocalhost
), et que l'adresse est techniquement valides par la spécification.- Heh...ce serait un cas intéressant, si vous envoyez un E-mail depuis le serveur lui-même, et de décider d'écrire "l'ami@localhost"
- hé, ouais. La plupart (bien configuré) serveurs d'email de rejeter les messages envoyés à des adresses qui ne correspondent pas prévu de domaine, donc en général il n'y a pas un problème avec
localhost
adresses. - double possible de Comment HTML5 input type email fonctionne sans nom de domaine
Vous devez vous connecter pour publier un commentaire.
Parce que a@b est une adresse email valide (par exemple localhost est un domaine de validité). Voir http://en.wikipedia.org/wiki/Email_address#Examples
Aussi, gardez à l'esprit que vous devez toujours faire de la validation de l'entrée dans le serveur. Du côté client, la validation devrait être seulement pour donner de la rétroaction à l'utilisateur et de ne pas s'y fier, car il peut être facilement contourné.
au@ua
Vous pouvez théoriquement disposer d'une adresse sans un".".
Puisque, techniquement, les choses telles que:
Sont tous les e-mails valides.
De sorte que la norme de la validation HTML5 permet pour tous les E-mails, y compris l'inhabituels.
Pour certains facile à lire les explications (au Lieu de lire à travers les normes):
http://en.wikipedia.org/wiki/Email_address#Examples
uz
, qui pointe directement vers une adresse IP de Oct 2018. Si vous faites unenslookup uz
, il souligne91.212.89.8
, il devrait donc être possible d'avoir des e-mail sur ce domaine.Essayez d'ajouter ce point à l'entrée
Violon
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$
La RFC 822, chapitre 6, donne la spécification d'une adresse dans augmented Backus-Naur Form (BNF):
À l'aide de cette spécification
a@b
est une adresse valide.Mise à JOUR
Pour répondre au commentaire de Trejkaz, j'ai ajouter les définitions suivantes. Nous voyons que l'ESPACE sont autorisés, mais seulement dans la chaîne de caractères entre guillemets.
Sur ce MDN page, il montre les regex, les navigateurs devraient utiliser pour valider l'e-mail:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation
Vous pouvez légèrement modifier cette regex pour exiger qu'au moins un point dans le nom de domaine: modification de l'étoile
*
à la fin de la regex pour un plus+
. Utilisez ensuite cette regex comme lepattern
attribut:Vous pouvez personnaliser le modèle du champ e-mail:
CSS:
HTML:
Ce modèle fonctionne toujours pour moi.
Texte doit en minuscules
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"
mais je pense qu'il couvre plus ou moins la plupart des e-mails.Ceci répond à la question.