Was ist die beste Validierungsmethode für Java-E-Mail-Adressen?
Was sind den gute E-Mail-Adresse Validierung Bibliotheken für Java? Gibt es alternativen zu commons validator?
Kommentar zu dem Problem
Ich lass das hier: davidcelis.com/blog/2012/09/06/...
Aktuelle URL Commons: commons.apache.org/proper/commons-validator/apidocs/org/apache/...
Sollten Sie nicht wollen, verwenden Bibliotheken (oder regexes), die nicht umfassend überprüfen. Aufgrund der Komplexität der gültigen E-Mail-Adresse, es gibt keine Mitte-Boden zwischen keine Validierung und umfassende Validierung. Apache Commons' - Implementierung ist nicht umfassend. Ich bin bewusst nur eine Bibliothek, die (E-Mail-rfc2822-validator), aber es funktioniert immer noch mit riesigen regexes. Eine umfassende lexer ist das, was Sie wirklich wollen. EmailValidator4J sagt, es macht den job, aber ich habe keine Erfahrung mit ihm.
InformationsquelleAutor der Frage jon077 | 2009-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Apache Commons ist allgemein bekannt als ein solides Projekt. Halten Sie im Verstand, obwohl, werden Sie noch haben, schicken Sie eine Bestätigungs-E-Mail an die Adresse, wenn Sie möchten, um sicherzustellen, dass es eine echte E-Mail, und der Besitzer will es auf Ihrer Website verwendet werden.
InformationsquelleAutor der Antwort Matthew Flaschen
Mithilfe der offizielle java-E-Mail-Paket ist die einfachste:
InformationsquelleAutor der Antwort Aaron Davidson
Apache-Commons-validator verwendet werden können, wie bereits in den anderen Antworten.
pom.xml:
bauen.gradle:
Import:
Code:
und damit lokale Adressen
InformationsquelleAutor der Antwort Aksel Willgert
Späte Antwort, aber ich denke, es ist einfach und würdig:
Testfälle:
Für die Produktion Zweck, den Domain-Namen Validierungen durchgeführt werden sollte, Netzwerk-Weise.
InformationsquelleAutor der Antwort Pujan Srivastava
Wenn Sie versuchen zu tun, eine form der Validierung, die vom client empfangen, oder nur eine bean-validation - keep it simple.
Es ist besser zu tun, um eine lockere E-Mail-Validierung, anstatt das zu tun eine strenge ein und lehnen sich einige Leute (z.B., wenn Sie versuchen, sich zu registrieren für Ihre web-service).
Mit fast alles erlaubt, in das username-part der E-Mail und so viele neue domains Hinzugefügt wird buchstäblich jeden Monat (zB .Unternehmen, .entreprise, .Immobilien), ist es sicherer, nicht zu restriktiv:
InformationsquelleAutor der Antwort Alexander Burakevych
Spät, um die Frage hier, aber: ich behaupte, eine Klasse unter dieser Adresse: http://lacinato.com/cm/software/emailrelated/emailaddress
Ist es, basierend auf Les Hazlewood ist Klasse, hat aber zahlreiche Verbesserungen und behebt ein paar bugs. Apache-Lizenz.
Ich glaube, es ist das leistungsfähigste E-Mail-parser in Java, und ich habe noch um zu sehen, in der Lage in jeder Sprache, obwohl es eine gibt. Es ist nicht ein lexer-Stil-parser verwendet wird, sondern eine komplizierte java-regex-und damit nicht so effizient wie es sein könnte, aber meine Firma hat analysiert, sowie über 10 Milliarden real-world-Adressen: es ist sicherlich geeignet für high-performance-situation. Vielleicht einmal im Jahr zu treffen, eine Adresse, die bewirkt, dass eine regex-stack overflow (angemessen), aber diese sind spam Adressen, die Hunderte oder Tausende von Zeichen lang sind, mit vielen, vielen Anführungszeichen und Klammern und dergleichen.
RFC-2822 und den zugehörigen specs sind wirklich sehr Freizügig in Bezug auf die E-Mail-Adressen, so eine Klasse wie diese overkill für die meisten Anwendungen. Zum Beispiel ist Folgendes eine gültige Adresse, je nach Skillung, Leerzeichen und alle:
Keine E-mail-server erlauben würde, aber diese Klasse kann analysieren (und umzuschreiben, um eine verwendbare form).
Fanden wir die vorhandenen Java-E-Mail-parser-Optionen unzureichend haltbar (das bedeutet, alle von Ihnen konnte nicht analysiert werden einige gültige Adressen), also haben wir diese Klasse.
Der code ist gut dokumentiert und hat eine Menge von einfach-zu-ändern Sie die Optionen zu erlauben oder zu verbieten, bestimmte E-Mail-Formulare. Es bietet auch eine Menge von Methoden zum Zugriff auf bestimmte Teile der Adresse (linke Seite, Rechte Seite, persönliche Namen, Kommentare, etc.) zu analysieren/validieren mailbox-Liste-Header zu analysieren/validieren der return-path (das ist einzigartig unter den Header) und so weiter.
Den code geschrieben hat eine javamail-Abhängigkeit, aber es ist leicht zu entfernen, wenn Sie nicht wollen, dass die kleine Funktionalität, die es bietet.
InformationsquelleAutor der Antwort lacinato
Ich Frage mich nur, warum niemand kam mit
@E-Mail
von Hibernate Validator ist die zusätzliche Einschränkungen. Der validator selbst istEmailValidator
.InformationsquelleAutor der Antwort Markus Malkusch
Les Hazlewood geschrieben hat, eine sehr Gründliche RFC 2822-konforme E-Mail-validator-Klasse, die mit Java reguläre Ausdrücke. Sie finden ihn unter http://www.leshazlewood.com/?p=23. Aber seine Gründlichkeit (oder die Java RE-Implementierung) führt zu Ineffizienz - die Kommentare Lesen, zum analysieren der Zeiten für lange Adressen.
InformationsquelleAutor der Antwort Philip
InformationsquelleAutor der Antwort Suryaprakash Pisay
Wenn Sie schauen, um zu überprüfen, ob eine E-Mail-Adresse gültig ist, dann VRFY erhalten Sie einige dem Weg Räumen. Ich habe festgestellt, dass es nützlich für die überprüfung intranet - Adressen (E-Mail-Adressen, interne Seiten). Aber es ist weniger nützlich für internet-mail Server (siehe die Hinweise oben auf dieser Seite)
InformationsquelleAutor der Antwort Brian Agnew
Was willst du überprüfen? Die E-Mail-Adresse?
Die E-Mail-Adresse kann nur überprüft werden, für dessen format-Konformität. Siehe der standard: RFC2822. Beste Weg das zu tun ist ein regulärer Ausdruck. Sie wird nie wissen, ob wirklich existiert, ohne das senden einer E-Mail.
Ich habe in der commons-validator. Es enthält ein org.apache.Unterhaus.validator.EmailValidator-Klasse. Scheint ein guter Ausgangspunkt.
InformationsquelleAutor der Antwort ReneS
Aktuellen Apache-Commons-Validator-version ist 1.3.1.
Klasse, dass überprüft wird, org.apache.Unterhaus.validator.EmailValidator. Es hat den import von org.apache.oro.text.perl.Perl5Util , die von einem pensionierten Jakarta-ORO-Projekt.
BTW, ich fand, dass es eine 1.4 version, hier sind die API-docs. Auf der Website er sagt: "Zuletzt Veröffentlicht: 05. März 2008 | Version: 1.4-SNAPSHOT", aber das ist nicht endgültig. Nur so bauen Sie sich (aber dies ist eine Momentaufnahme, nicht RELEASE) und die Verwendung oder den download von hier. Dies bedeutet, dass 1.4 noch nicht gemacht worden, die letzten drei Jahre (2008-2011). Dies ist nicht im Apache-Stil.
Ich bin auf der Suche nach eine bessere option, aber nicht finden, eine, die sehr angenommen. Ich will etwas, das gut getestet, nicht treffen wollen, keine Fehler.
InformationsquelleAutor der Antwort mist
Obwohl es viele alternativen zum Apache-commons-Implementierungen bestenfalls rudimentär sind (wie Apache-commons-Umsetzung selbst) und auch absolut falsch, in anderen Fällen.
Würd ich auch bleiben Weg von so genannten einfachen 'non-restrictive' für die regex; es gibt keine solche Sache. Zum Beispiel @ erlaubt ist mehrere Male je nach Kontext, wie Sie wissen, der Bedarf da ist? Einfache regex wird es nicht verstehen, auch wenn die E-Mail muss gültig sein. Alles komplexer wird fehleranfällig oder enthalten sogar versteckte performance-Killer. Wie wollen Sie pflegen so etwas wie diese?
Die einzige umfassende RFC-kompatible regex-validator basiert, die ich bewusst bin, ist E-Mail-rfc2822-validator mit seiner 'raffinierten' regex entsprechend benannten Dragons.java. Es unterstützt nur die älteren RFC-2822 spec obwohl, obgleich passend genug für die modernen Bedürfnisse (RFC-5322 updates es schon in Gebieten, die außerhalb des Bereichs für den täglichen Gebrauch Fälle).
Aber wirklich, was Sie wollen ist ein lexer , richtig analysiert einen string und bricht es in die Komponente Struktur gemäß der RFC-Grammatik. EmailValidator4J scheint vielversprechend in dieser Hinsicht, aber ist noch jung und beschränkt.
Anderen option, die Sie haben, ist mit einem webservice wie z.B. Mailgun ist kampferprobt Validierung von webservice oder Mailboxlayer API (nahm einfach die ersten Google-Ergebnisse). Es ist streng genommen nicht RFC-konform, aber funktioniert gut genug für die modernen Bedürfnisse.
InformationsquelleAutor der Antwort Benny Bottema
Möglicherweise möchten Sie auch zu prüfen, für die Länge - E-Mails sind maximal 254 chars lang. Ich benutze das apache-commons-validator und es nicht überprüfen.
InformationsquelleAutor der Antwort minglis
Dort nicht erscheinen zu sein jeder perfekt Bibliotheken oder die Möglichkeiten dies selbst zu tun, es sei denn, Sie haben zu Zeit, senden Sie eine E-Mail an die E-Mail-Adresse und warten auf eine Antwort (dies ist vielleicht nicht eine option, obwohl). Ich landete mit einem Vorschlag von hier http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ und Anpassung des Codes, damit es in Java.
InformationsquelleAutor der Antwort matt.writes.code
Dies ist die beste Methode:
Quellen:-
http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
InformationsquelleAutor der Antwort Pravinsingh Waghela
Hier ist mein pragmatischer Ansatz, wo ich will einfach nur vernünftigen unterschiedliche bla@domain-Adressen mit den zulässigen Zeichen aus dem RFC. Adressen müssen in Kleinbuchstaben umgewandelt zuvor.
InformationsquelleAutor der Antwort Craig Day
Eine weitere option ist die Verwendung der Hibernate validator email, mit der Anmerkung
@Email
oder mit der validator-Klasse ein Programm, wie:InformationsquelleAutor der Antwort Dherik
InformationsquelleAutor der Antwort Ghanshyam Acharya
Dies ist der einfachste Weg, es zu tun, ohne dass reguläre Ausdrücke oder Objekt-Armageddon.
InformationsquelleAutor der Antwort ea234
/*zum validieren von E-Mail-id ohne Verwendung von regex und Pakete
und gefolgt von Ihrem überprüfen symbol-und domain-Endungen u hinzufügen können ...
unten try1,holly Methoden */
InformationsquelleAutor der Antwort Panneer Selvam
Ich habe eine Klasse früher für ein Android-Anwendung, die Sie es nützlich finden,
}
InformationsquelleAutor der Antwort Ibrahim Khaled