HTML5-E-Mail-Validierung

102

Es heißt "Mit HTML5 benötigen wir kein js oder einen serverseitigen Code mehr, um zu überprüfen, ob die Benutzereingabe eine gültige E-Mail- oder URL-Adresse ist."

Wie kann ich E-Mails nach Eingabe eines Benutzers validieren? und ohne JS, wie eine Nachricht angezeigt wird, wenn der Benutzer eine falsche Form seiner E-Mail-Adresse eingibt.

<input type="email" pattern="[^ @]*@[^ @]*" placeholder="Enter your email">
<input type="submit" value="Submit">
abcid d
quelle
49
Sie müssen immer auf der Serverseite validieren. Ein cleverer Client kann jede clientseitige Sicherheitsmaßnahme umgehen.
Benjamin Gruenbaum
Diese Antwort kann hilfreich sein, wenn Sie versuchen, die HTML5-Formularüberprüfung einzurichten. Natürlich würden Sie wahrscheinlich immer noch eine serverseitige Validierung benötigen.
Joeytje50
2
Die Regex-E-Mail-Validierung sollte unter keinen Umständen verwendet werden. Regex-Checks weisen zu viele Mängel auf. Der beste Weg, eine E-Mail-Adresse zu "validieren", besteht darin, sie einfach zweimal eingeben zu lassen und eine Regex-Prüfung durchzuführen, die dem Benutzer eine WARNUNG gibt, dass sie nicht wie eine gültige E-Mail-Adresse aussieht, wenn sie nicht mit dem Muster übereinstimmt, und fordert den Benutzer auf, dies zu überprüfen. Auf diese Weise kann der Benutzer, wenn er tatsächlich gültig ist, aber der reguläre Ausdruck fehlschlägt (wie so oft), einfach bestätigen, dass er weiß, dass er gültig ist, und fortfahren. Viel zu viele Websites verwenden die Regex-Validierung und sind für viele Benutzer frustrierend.
Soundfx4
Ich empfehle, diesen Artikel zu lesen
Iman Hejazi
Es ist sinnlos, den Benutzer zu bitten, dieselbe E-Mail-Adresse zweimal einzugeben. Wenn Sie ihre E-Mail-Adresse nicht kennen, verbessert eine zweimalige Eingabe die Chancen nicht. Wenn sie ihre E-Mail-Adresse kennen, ist die Aufforderung, sie zweimal einzugeben, nur eine schlechte Benutzeroberfläche.
Mikko Rantalainen

Antworten:

120

In HTML5 können Sie Folgendes tun:

<form>
<input type="email" placeholder="Enter your email">
<input type="submit" value="Submit">
</form>

Wenn der Benutzer auf "Senden" drückt, wird automatisch eine Fehlermeldung angezeigt:

Fehlermeldung

Midhun MP
quelle
3
Was ist der Vorteil des Musters hier? Die Angabe des Typs als E-Mail enthält bereits ein integriertes Muster, um dies zu ermitteln.
Rich Bradshaw
3
@ RichBradshaw: Ja, du bist richtig. Keine Notwendigkeit, das Muster anzugeben (ich habe gerade Code aus OP kopiert, ich habe ihn jetzt korrigiert :))
Midhun MP
6
@ MichaelDeMutis: Sie können das requiredAttribut verwenden
Midhun MP
28
Die E-Mail sucht nicht .comin einer E-Mail. Es wird nur das @ -Zeichen überprüft. Ex. Ich kann example@gmaildas Formular eingeben und speichern. Es ist jedoch keine gültige E-Mail-Adresse. Gibt es eine Problemumgehung, die ordnungsgemäß überprüft werden muss [email protected]?
Ruchika
9
@ Liz. example@gmailMöglicherweise handelt es sich nicht um eine gültige E-Mail, es handelt sich jedoch um ein gültiges E-Mail-Adressformat.
Pyjaja
47

Auf der input type=emailSeite der Website www.w3.org wird darauf hingewiesen , dass eine E-Mail-Adresse eine beliebige Zeichenfolge ist, die dem folgenden regulären Ausdruck entspricht:

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

Verwenden Sie das requiredAttribut und ein patternAttribut, um zu fordern, dass der Wert mit dem Regex-Muster übereinstimmt.

<input
    type="text"
    pattern="/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/"
    required
>
Stefan Ciprian Hotoleanu
quelle
14
Sie müssen das Muster ohne die beiden Symbole '/' und Startsymbol '^' und Ende '$' einfügen. Wie diese[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
Victor
4
@ Victor Sorry, aber du liegst teilweise falsch. Diese Symbole sind wichtig, ohne sie stimmt das Muster überall in der Zeichenfolge überein und macht es unbrauchbar. Wo Sie richtig liegen, lassen Sie die Schrägstriche heraus.
Hexodus
@ Victor Ihre Antwort hat bei mir funktioniert. Die Regex von OP gab mir ein falsch positives Sprichwort, um den Anforderungen des Formulars zu entsprechen, selbst wenn es sich um eine gültige E-Mail-Adresse handelt. Vielleicht verwende ich kein normales HTML, sondern React JS, um das HTML-Formular zu rendern.
Ka Mok
Ich habe dies fast abgelehnt, weil die richtige Antwort darin besteht, type="email"die validboolesche Eigenschaft im DOMNode zu verwenden und zu überprüfen - keine Notwendigkeit, den zugrunde liegenden regulären Ausdruck zu wiederholen
Dominic
Vielen Dank, dass Sie dies erwähnt haben.
Stefan Ciprian Hotoleanu
17

Verwenden [a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}für [email protected]/[email protected]

Van Nguyen
quelle
4
Dieser reguläre Ausdruck stellt eine Reihe unangemessener Anforderungen an E-Mail-Adressen. Beispielsweise lehnt er E-Mail-Adressen ab, die einen Benutzernamen mit einem oder zwei Buchstaben haben oder die unter einem Domainnamen mit einem Buchstaben gehostet werden.
Abenddämmerung -inaktiv-
Bearbeitet. Vielen Dank, dass Sie @duskwuff
Van Nguyen
Lehnt Domainnamen mit einem Buchstaben immer noch ab.
Abenddämmerung -inaktiv-
Dies ermöglicht Domänen mit 1 Buchstaben / Zahlen: [a-zA-Z0-9.-_] {1,} @ [a-zA-Z0-9 .-] {1,} [.] {1} [a-zA -Z0-9] {2,}
Ruder
Beachten Sie auch, dass es sich beispielsweise postmaster@aium eine gültige E-Mail-Adresse handelt und dass dieser reguläre Ausdruck dies ebenfalls verbietet. (Quelle: serverfault.com/q/154991/104798 )
Mikko Rantalainen
12
document.getElementById("email").validity.valid

scheint wahr zu sein, wenn das Feld entweder leer oder gültig ist. Dies hat auch einige andere interessante Flaggen:

Geben Sie hier die Bildbeschreibung ein

In Chrome getestet.

Nakilon
quelle
8

Hier ist das Beispiel, das ich für alle meine Formular-E-Mail-Eingaben verwende. Dieses Beispiel ist ASP.NET, gilt jedoch für alle:

<asp:TextBox runat="server" class="form-control" placeholder="Contact's email" 
    name="contact_email" ID="contact_email" title="Contact's email (format: [email protected])" 
    type="email" TextMode="Email" validate="required:true"
    pattern="[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*" >
</asp:TextBox>

HTML5 überprüft das Muster weiterhin, wenn es nicht benötigt wird. Ich habe noch keinen gefunden, der falsch positiv war.

Dies wird wie folgt gerendert:

<input class="form-control" placeholder="Contact's email" 
    name="contact_email" id="contact_email" type="email" 
    title="Contact's email (format: [email protected])" 
    pattern="[a-zA-Z0-9!#$%&amp;'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*">
Keith H.
quelle
7

Ich weiß, dass Sie nicht nach der Javascript-Lösung suchen, aber es gibt einige Dinge wie die angepasste Validierungsnachricht, die meiner Erfahrung nach nur mit JS durchgeführt werden kann.

Mithilfe von JS können Sie die Validierung auch dynamisch zu allen Eingabefeldern vom Typ E-Mail auf Ihrer Site hinzufügen, anstatt jedes einzelne Eingabefeld ändern zu müssen.

var validations ={
    email: [/^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/, 'Please enter a valid email address']
};
$(document).ready(function(){
    // Check all the input fields of type email. This function will handle all the email addresses validations
    $("input[type=email]").change( function(){
        // Set the regular expression to validate the email 
        validation = new RegExp(validations['email'][0]);
        // validate the email value against the regular expression
        if (!validation.test(this.value)){
            // If the validation fails then we show the custom error message
            this.setCustomValidity(validations['email'][1]);
            return false;
        } else {
            // This is really important. If the validation is successful you need to reset the custom error message
            this.setCustomValidity('');
        }
    });
})
karic83
quelle
Bitte poste nicht nur Linkantworten.
Fügen Sie
4

Ein bisschen spät für die Party, aber dieser reguläre Ausdruck hat mir geholfen, die Eingabe des E-Mail-Typs auf der Client-Seite zu überprüfen. Wir sollten die Überprüfung jedoch auch immer auf der Serverseite durchführen.

<input type="email" pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$">

Weitere Regex aller Art finden Sie hier .

nbsamar
quelle
4

TL; DR: Die einzige 100% korrekte Methode besteht darin, irgendwo in der eingegebenen E-Mail-Adresse nach @ -sign zu suchen und dann eine Validierungsnachricht an die angegebene E-Mail-Adresse zu senden. Wenn sie den Validierungsanweisungen in der E-Mail-Nachricht folgen können , ist die eingegebene E-Mail-Adresse korrekt.

Lange Antwort:

David Gilbertson schrieb vor ungefähr diesem Jahr :

Wir müssen zwei Fragen stellen:

  1. Hat der Benutzer verstanden, dass er eine E-Mail-Adresse in dieses Feld eingeben sollte?
  2. Hat der Benutzer seine eigene E-Mail-Adresse korrekt in dieses Feld eingegeben?

Wenn Sie ein übersichtliches Formular mit einem Etikett mit der Aufschrift "E-Mail" haben und der Benutzer irgendwo ein "@" -Symbol eingibt, können Sie mit Sicherheit sagen, dass er verstanden hat, dass er eine E-Mail-Adresse eingeben sollte. Einfach.

Als nächstes möchten wir eine Validierung durchführen, um festzustellen, ob sie ihre E-Mail-Adresse korrekt eingegeben haben.

Nicht möglich.

[...]

Jeder falsche Typ führt definitiv zu einer falschen E-Mail-Adresse, aber möglicherweise nur zu einer ungültigen E-Mail-Adresse.

[...]

Es macht keinen Sinn herauszufinden, ob eine E-Mail-Adresse "gültig" ist. Es ist weitaus wahrscheinlicher, dass ein Benutzer eine falsche und gültige E-Mail-Adresse eingibt als eine ungültige .

Mit anderen Worten, es ist wichtig zu beachten, dass jede Art von stringbasierter Validierung nur prüfen kann, ob die Syntax ungültig ist. Es kann nicht überprüft werden, ob der Benutzer die E-Mail tatsächlich sehen kann (z. B. weil der Benutzer bereits Anmeldeinformationen, die eingegebene Adresse einer anderen Person oder die eingegebene geschäftliche E-Mail anstelle der persönlichen E-Mail-Adresse für einen bestimmten Anwendungsfall verloren hat). Wie oft lautet die Frage, nach der Sie wirklich suchen, "Ist diese E-Mail syntaktisch gültig " anstelle von " Kann ich mit dem Benutzer über die angegebene E-Mail-Adresse kommunizieren "? Wenn Sie die Zeichenfolge mehr als "enthält sie @" validieren , versuchen Sie, die vorherige Frage zu beantworten! Persönlich interessiert mich immer nur die letztere Frage.

Darüber hinaus funktionieren einige E-Mail-Adressen, die möglicherweise syntaktisch oder politisch ungültig sind. Funktioniert beispielsweise postmaster@aitechnisch, obwohl TLDs keine MX-Einträge haben sollten . Siehe auch Diskussion über E - Mail - Validierung auf der WHATWG Mailingliste (wo HTML5 in erster Linie konzipiert ist).

Mikko Rantalainen
quelle
2

Erstellen Sie mit HTML 5 einfach die eingegebene E-Mail wie folgt:

<input type="email"/>

Wenn der Benutzer mit der Maus über das Eingabefeld fährt, wird ein Tooltip angezeigt, in dem er aufgefordert wird, eine gültige E-Mail-Adresse einzugeben. Bootstrap-Formulare enthalten jedoch eine viel bessere Tooltip-Nachricht, mit der der Benutzer aufgefordert wird, eine E-Mail-Adresse einzugeben. Diese wird angezeigt, sobald der eingegebene Wert nicht mit einer gültigen E-Mail übereinstimmt.

Fabian Madurai
quelle
Dies macht jedoch Fälle wie "abc @ gmail" nicht ungültig.
Nbsamar
Ja, ich denke schon. Ich würde gerne Valide, wenn der Benutzer Google Mail oder Hotmail einbindet, zum Beispiel, wenn mein Nutzer andere einbindet, als sie nicht mit meinem Login fortfahren zu lassen. Wissen Sie, wie ich das tun kann?
Simon
2

Sie können diesem Muster auch folgen

<form action="/action_page.php">
  E-mail: <input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
  <input type="submit">
</form>

Ref: In W3Schools

skpaik
quelle
1
<input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$" title="please enter valid email [[email protected]].">Sie können auch einen Titel hinzufügen, um eine Gültigkeitsmeldung anzuzeigen.
Imdzeeshan
1

Laut MDN ist dieses RegExp in Ordnung, um E-Mails zu validieren, da E-Mails, die den Spezifikationen entsprechen, damit übereinstimmen sollten.

/^[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])?)*$/
ZachT112
quelle
0

Es ist sehr schwierig, E-Mails einfach mit dem HTML5-Attribut "pattern" korrekt zu validieren. Wenn Sie kein "Muster" verwenden, wird jemand @ verarbeitet. Das ist keine gültige E-Mail.

Für die Verwendung pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}"muss das Format [email protected]jedoch sein. Wenn der Absender ein Format wie [email protected](oder ein ähnliches) hat, das nicht validiert wird, um dies zu beheben, können Sie pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}"festlegen, dass ".com.au oder .net.au oder ähnliches" validiert wird.

Wenn Sie dies jedoch verwenden, kann [email protected] nicht validieren. Soweit die einfache Verwendung von HTML5 zur Validierung von E-Mail-Adressen noch nicht vollständig bei uns ist. Um dies zu vervollständigen, würden Sie ungefähr Folgendes verwenden:

<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>

oder:

<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>

Ich weiß jedoch nicht, wie ich beide oder alle Versionen von E-Mail-Adressen mithilfe des HTML5-Musterattributs überprüfen kann.

Keith
quelle
1
Regex-Checks sollten unter keinen Umständen verwendet werden. Es gibt zu viele Muster und sie haben zu viele Fehler. Zum Beispiel wird [email protected] für viele Regex-Prüfungen als ungültig angesehen, wenn es tatsächlich 100% gültig ist. Regex ist mir und vielen anderen Anwendern ein Dorn im Auge und es muss gehen. Es muss eine alternative Methode verwendet werden, um sicherzustellen, dass ein Benutzer eine gültige E-Mail-Adresse eingibt.
Soundfx4
Beachten Sie auch, dass es sich beispielsweise postmaster@aium eine gültige E-Mail-Adresse handelt und dass dieser reguläre Ausdruck dies ebenfalls verbietet. (Quelle: serverfault.com/q/154991/104798 )
Mikko Rantalainen
Neben HTML5 wird auch ein E-Mail-Validierungstool wie DeBounce empfohlen.
Iman Hejazi