
So validieren Sie eine E-Mail-Adresse mit regulären Ausdrücken (Regex)
Nahezu jede Programmiersprache unterstützt heutzutage reguläre Ausdrücke. Obwohl einige Entwickler sie nicht mögen, sind sie wirklich eine bewährte Methode, da sie normalerweise Funktionen wie die Validierung extrem schnell mit weniger Serverressourcen ausführen. E-Mail-Adressen sind ein perfektes Beispiel … wo sie leicht überprüft werden können, um sicherzustellen, dass sie richtig formatiert sind.
Denken Sie daran, dass die Validierung nicht der Fall ist Überprüfung. Validierung bedeutet einfach, dass die übergebenen Daten einem ordnungsgemäß aufgebauten Standardformat folgen. Einige interessante Dinge über E-Mail-Adressen, die bei der Validierung übersehen werden könnten.
Wie lang darf eine E-Mail-Adresse sein?
Ich musste heute ein bisschen graben, um es zu finden, aber wussten Sie, wie lang eine E-Mail-Adresse gültig ist? Es ist tatsächlich in Teile zerbrochen ... Name@Domain.com. Dies ist nach RFC2822.
- Der Name kann 1 bis 64 Zeichen lang sein.
- Die Domain kann 1 bis 255 Zeichen lang sein.
Das bedeutet, dass dies eine gültige E-Mail-Adresse sein könnte:
loremaipsumadolorasitaametbaconsectetueraadipiscin
gaelitanullamc@loremaipsumadolorasitaametbaconsect
etueraadipiscingaelitcaSedaidametusautanisiavehicu
laaluctuscaPellentesqueatinciduntbadiamaidacondimn
tumarutrumbaturpisamassaaconsectetueraarcubaeuatin
ciduntaliberoaaugueavestibulumaeratcaPhasellusatin
ciduntaturpisaduis.com
Versuchen Sie, das auf einer Visitenkarte unterzubringen! Ironischerweise sind die meisten E-Mail-Adressfelder im Web auf 100 Zeichen begrenzt … was technisch nicht korrekt ist. Einige der anderen regulären Ausdrücke, die zur Validierung von E-Mail-Adressen verwendet werden, suchen ebenfalls nach einer dreistelligen Top-Level-Domain, wie .com; Es gibt jedoch keine Beschränkung der Länge von Top-Level-Domains (z.B. Martech Zone hat 4 Ziffern – .zone).
Die Standardisierung von E-Mail-Adressen ist viel komplexer, als Sie denken. Nach dem Standard geschrieben, ist hier der wahre reguläre Ausdruck für eine E-Mail-Adresse, credit to Regexr:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
HTML5 braucht nicht einmal eine Validierung
Das einfachste Mittel, um sicherzustellen, dass eine E-Mail gemäß dem Standard valide ist, ist die Verwendung eines HTML5-E-Mail-Eingabefelds:
<input type='email' name='email' placeholder='name@domain.com' />
Es kann jedoch vorkommen, dass Ihre Webanwendung die E-Mail-Adresse sowohl bei der Eingabe im Browser als auch bei der Übermittlung an Ihren Server validieren möchte.
Regex für eine korrekte E-Mail-Adresse in PHP
Nur wenige Leute wissen es, aber PHP hat jetzt den RFC-Standard eingebaut Filtervalidierungsfunktion.
if(filter_var("name@domain.com", FILTER_VALIDATE_EMAIL)) {
// Valid
}
else {
// Not Valid
}
Regex für eine korrekte E-Mail-Adresse in Javascript
Sie müssen keinen übermäßig komplexen Standard zum Überprüfen einer E-Mail-Adressstruktur haben. Hier ist ein einfaches Mittel mit JavaScript.
function validateEmail(email)
{
var re = /\\S+@\\S+/;
return re.test(email);
}
Das entspricht natürlich nicht dem RFC-Standard, daher möchten Sie möglicherweise jeden Abschnitt der Daten validieren, um sicherzustellen, dass er gültig ist. Dieser reguläre Ausdruck entspricht etwa 99.9 % der E-Mail-Adressen da draußen. Es entspricht nicht vollständig dem Standard, ist aber für praktisch jedes Projekt nützlich.
function validateEmail(email)
{
var re = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;
return re.test(email);
}
Die Anerkennung für diese Beispiele geht an HTML.form.guide.
Für Formulare mit mehreren E-Mail-Adressen wäre es gut, class="emailaddress" zu verwenden. Wenn Sie über die Prototyp.js-Bibliothek (http://www.prototypejs.org) auf der Seite enthalten können Sie so etwas tun:
var gültig = wahr;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
$$ ('. emailaddress'). each (Funktion (E-Mail) {
if (! filter.test (email.value)) {
alert (? Bitte geben Sie eine gültige E-Mail-Adresse an?);
email.fokus;
gültig = falsch;
}
});
Rückgabe gültig;
Danke Ade! Ich muss etwas mehr über Klassen und JavaScript lernen!
Dougs ursprüngliches Beispiel war cool, aber dieses ist eiskalt! Ich wusste nicht, dass Sie Elemente mit einer Klasse auf diese Weise verarbeiten können, und die funktionale Syntax ist süß.
Ade und sein Team sind unglaublich!
Schön, ich kann mich immer auf dich verlassen, wenn es um ein paar coole Skripte geht! 🙂
Danke Tony!
Ich mag die Idee, aber ich würde zögern, diesen speziellen regulären Ausdruck zu übernehmen, ohne zu beschreiben, welche legalen E-Mail-Adressen er nicht akzeptiert und welche illegalen Adressen er zulässt.
Ein Beispiel für einen regulären Ausdruck, der gute Arbeit leistet, sowie eine Erklärung, welche Fälle nicht behandelt werden, finden Sie hier:
http://www.regular-expressions.info/email.html
Meine persönliche Präferenz ist es, die meisten einfachen Fälle abzudecken und eine Warnung für alles andere auszugeben, anstatt sie abzulehnen. Wenn Bob wirklich sto einreichen will bob@com.museum statt bob@museum.com, warum nicht ihn lassen?
Hallo Reg,
Sie können den Regex mit einem testen Online-Regex-Tester.
Außerdem kann definitiv noch viel mehr getan werden, wenn Sie eine sicherstellen möchten E-Mail-Addresse ist gemäß RFC gültig.
Es gibt einige Gründe, warum jemand keine ungültige E-Mail-Adresse eingeben darf:
1. Sie ärgern sich über Sie, wenn die erwartete E-Mail nicht ankommt – egal, ob Sie an der falschen Adresseingabe schuld sind oder nicht.
2. Wenn com.museum eine gültige Domain war und, sagen wir, Yahoo! betrieben – jede E-Mail-Adresse, die unzustellbar ist, würde sich negativ auf den Ruf Ihres Unternehmens für die E-Mail-Zustellung auswirken. Dies kann dazu führen, dass alle E-Mails Ihres Unternehmens blockiert werden.
3. Wenn Ihr E-Mail-Dienstanbieter Ihnen die Eingabe erlaubt hat bob@com.museum, zahlen Sie auch für jede E-Mail, die an diese E-Mail-Adresse gesendet wird, bis sie diese Adresse aufgrund von Unzustellbarkeiten abbestellt haben. Ich würde mich von ESP fernhalten, die eine solche ungültige E-Mail-Adresse zulassen würde – sie nehmen nur Ihr Geld!
Danke für's vorbeikommen!
Doug
Perfekt, genau das, was ich brauchte!
Es gibt eine viel einfachere Möglichkeit, den Ausdruck zu schreiben:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
- Mit dem letzten Modifikator / i muss der Großbuchstabenbereich nicht angegeben werden.
- Ich kenne keine TLDs mit Zahlen drin.
Nebenbei bemerkt, ich erlaube TLD mit bis zu 6 Zeichen; Neue kommen regelmäßig und man weiß es nie (na ja, einige zukünftige haben vielleicht sogar Zahlen, ich weiß).
Hallo,
Ich versuche, dies in einer vorhandenen Form in Echtzeit zu verwenden, aber dies scheint nicht in Echtzeit zu validieren, wie dies bei der Überprüfung Ihrer Passwortstärke der Fall ist.
Oder bin ich nur so ahnungslos und es funktioniert nicht für mich?
Übrigens, ich mag wirklich, was Sie hier vorhaben, Ihre Tutorials sind sehr einfach, ich werde dieses auf jeden Fall mit einem Lesezeichen versehen….
Nur ein FYI; Ich habe Ades Lösung nicht ausprobiert, aber das obige Muster validiert keine E-Mail-Adressen mit Apostrophen darin. (zB Mike.O'Hare@Whatever.com). Apostrophe sind gemäß RFC 2821/2822 gültig –> http://www.faqs.org/rfcs/rfc2822.html
HTH,
Sanjay
Es scheint auch nicht das Pluszeichen zu behandeln, das gültig ist.
Siehe: http://www.dominicsayers.com/isemail/
Im Großen und Ganzen ist dies ein Hauptproblem beim Ausschneiden und Einfügen von Code, das eine ausführliche Diskussion an sich verdient.
@ robbyslaughter.com
du bist nutz ..
es funktioniert gut ..! @
Wäre schön, wenn wir eine Lösung finden könnten, um gefälschte E-Mail-Adressen bei Kommentaren auf WordPress zu vermeiden
Nur eine kleine Korrektur: Der reguläre Ausdruck hat am Ende ein extra () +. Es sollte lauten:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
Mit dem ersten würden TLDs beliebiger Länge akzeptiert (was nicht intrinsecal falsch ist, wie andere betont haben, aber wenn dies die Absicht wäre, könnte der Ausdruck verkürzt werden).
Können Sie bitte den regulären Ausdruck dieses Codes und seine Funktionsweise erläutern? Auch über .test - Ist .test eine Standardanweisung in Javascript, um Dinge zu überprüfen, wie Sie es im obigen Code getan haben?
Dies ist ein Funktionscode für den Ausdruck von E-Mails.
Funktion validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._- weibl.
return emailPattern.test (id);
}
Deepak Rai
varanasi
Dies ist ein Funktionscode für den Ausdruck von E-Mails.
Funktion validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._- weibl.
return emailPattern.test (id);
}
Deepak Rai
varanasi
Vielen Dank Onkel. Das hat mir sehr geholfen 🙂
Amandas
danke für den code!
Danke, aber es gibt einen Fehler in dieser Regex. Ich bin kein Regex-Experte, aber ich habe versucht, eine E-Mail zu senden:
Test Test
und es hat die Regex bestanden ... Ich habe bemerkt, dass es fehlt, dem "." so sollte es sein:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
Ich rolle mit
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$ /.
und was ist mit .info?
oh shit… vor 3 Jahren? : S.
Nun, dies ist nur eine grobe Überprüfung, aber nicht 100% genau, zum Beispiel wäre dies in Ordnung john_doe. @ gmail.com Dies ist eigentlich keine gültige E-Mail-Adresse (Punkt ist nicht als letztes Zeichen im lokalen Teil der E-Mail zulässig).
Auch würde es akzeptieren john…doe@gmail.com Dies ist auch ungültig, da eine Sequenz nicht mehr als einen Punkt enthalten kann.
Dies sind nur einige Mängel, die ich auf den ersten Blick bemerkt habe.
Meine Absicht ist es nicht, nur darauf hinzuweisen, falls jemand plant, dies als Sicherheitskontrolle zu verwenden - nicht sicher genug.
Informationen zu gültigen E-Mail-Adressen finden Sie hier: http://en.wikipedia.org/wiki/E-mail_address
Deepak,
Eigentlich denke ich, dass Sie ein Escape für den Punkt (".") Anwenden müssen. Ihre Funktion sollte also stattdessen sein:
Funktion validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._- weibl.
return emailPattern.test (id);
}
Andernfalls würde der Punkt "jedes Zeichen" bedeuten. Ich glaube, solche Sonderzeichen müssen entkommen.
Grüße,
Federico
Funktion validateEmail (fld) {
var error = ””;
var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
var illegalChars = / [(),;: \ ”[]] /;
if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {
error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
} else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
} else if (fld.value.match (illegalChars)) {
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
}
Rückgabefehler;
}
Funktion validateEmail (fld) {
var error = ””;
var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
var illegalChars = / [(),;: \ ”[]] /;
if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {
error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
} else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
} else if (fld.value.match (illegalChars)) {
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
}
Rückgabefehler;
}
Funktion validateEmail (fld) {
var error = ””;
var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
var illegalChars = / [(),;: \ ”[]] /;
if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {
error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
} else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
} else if (fld.value.match (illegalChars)) {
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
}
Rückgabefehler;
}
Funktion validateEmail (fld) {
var error = ””;
var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
var illegalChars = / [(),;: \ ”[]] /;
if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {
error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
} else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
} else if (fld.value.match (illegalChars)) {
error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
}
Rückgabefehler;
}
Funktionsausstattung (en)
{
return s.replace (/ ^ s + | s + $ /, ”);
}
Funktionsausstattung (en)
{
return s.replace (/ ^ s + | s + $ /, ”);
}
Der '.focus' ist eine Funktion, die es sein sollte:
email.focus ()
Der '.focus' ist eine Funktion, die es sein sollte:
email.focus ()
ehrfürchtige
Funktioniert wie gem .. Große Verwendung von reg Ausdrücken in Javascript…
Es ist ein Riss im Edelstein…
Die Adresse "mmm @ mmm..com" wird akzeptiert. Zwei Punkte zusammen sind jedoch nicht gültig.
Fellas, benutze. Es ist keine JS-Validierung erforderlich.
Funktioniert aber nur mit modernen Browsern. Leider hat die Welt noch nicht aufgeholt. - -
Gesendet von Mailbox für iPhone