J'écris une maquette très simple pour illustrer une validation de formulaire au format HTML5. Cependant, j’ai remarqué que la validation de l’e-mail ne vérifie pas la présence d’un point dans l’adresse, ni les caractères qui le suivent.
En d'autres termes, "john @ doe" est considéré comme valide, alors que ce n'est clairement pas une adresse électronique valide. "doe" n'est pas un domaine.
Voici comment je code mon champ email:
<input type="email" required />
N'est-ce pas assez?
Vérifiez ceci violon pour voir ce que je veux dire.
Remarque: je sais comment accomplir cela via un modèle RegEx. Je me demande simplement comment quelqu'un pourrait utiliser le type de courrier électronique à la place.
Parce que a @ b est une adresse électronique valide (par exemple, localhost est un domaine valide). Voir http://en.wikipedia.org/wiki/Email_address#Examples
De plus, n'oubliez pas que vous devez toujours effectuer la validation des entrées sur le serveur. La validation côté client doit être uniquement destinée à fournir un retour d'information à l'utilisateur et ne doit pas être utilisée, car elle peut être facilement contournée.
Vous pouvez théoriquement avoir une adresse sans "." dans.
Depuis techniquement, des choses telles que:
user@com
user@localserver
user@[IPv6:2001:db8::1]
Sont tous les emails valides.
La validation standard HTML5 autorise donc tous les courriels valides, y compris les courriels peu communs.
Pour des explications faciles à lire (au lieu de lire les normes): http://en.wikipedia.org/wiki/Email_address#Examples
Le RFC 822 , chapitre 6, donne la spécification d'une adresse sous la forme augmentée Backus-Naur (BNF):
addr-spec = local-part "@" domain
local-part = Word *("." Word)
domain = sub-domain *("." sub-domain)
En utilisant cette spécification a@b
est une adresse valide.
[~ # ~] met à jour [~ # ~]
Pour répondre au commentaire de Trejkaz, j'ajoute les définitions suivantes. Nous voyons que les espaces sont autorisés, mais seulement dans la chaîne entre guillemets.
Word = atom / quoted-string
atom = 1*<any CHAR except specials, SPACE and CTLs>
quoted-string = <"> *(qtext/quoted-pair) <">
SPACE = <ASCII SP, space>
CTL = <any ASCII control character and DEL>
qtext = <any CHAR excepting <">, "\" & CR, and including linear-white-space>
quoted-pair = "\" CHAR
Sur cette page MDN, il indique que les navigateurs regex doivent utiliser pour valider le courrier électronique:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation
Vous pouvez légèrement changer cette expression rationnelle pour exiger au moins un point dans le nom de domaine: changez l'étoile *
à la fin de la regex à un plus +
. Puis utilisez cette expression rationnelle comme attribut pattern
:
<input type="email" pattern="^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$"></input>
Vous pouvez personnaliser le modèle du champ email:
input:valid {
border-color: green
}
input:invalid {
border-color: red
}
Email:
<input type="email" required value="[email protected]" /><br>
Non-dots Email:
<input type="email" required pattern="[^.]+@[^.]+" value="[email protected]" />