E-Mail-Adresse Validierung schlägt fehl, wenn der domain-name hat einen Bindestrich
Habe ich eine E-Mail-Adresse Validierung regex, Welches ich in den code wie folgt:
public class Test {
public static void main(String[] args) {
try {
String lineIwant = "[email protected]";
String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Boolean b = lineIwant.matches(emailreg);
if (b == false) {
System.out.println("Address is Invalid");
}else if(b == true){
System.out.println("Address is Valid");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
Auf diese spezifische E-Mail-Adresse in dem Beispiel, wird das Boolean-gibt false zurück, obwohl dies eine gültige Kunden-E-Mail-Adresse.
Bin ich besorge, es ist, weil der Bindestrich zwischen ramco
und group
weil wenn ich Sie entfernen den booleschen Wert true zurück.
Wie kann ich mein regex, um Platz für eine solche E-Mail-Adresse?
- Nicht das Rad neu zu erfinden - so etwas wie
EmailValidator
. - Für deine Info ich hatte schon Angeschaut, die Frage und die regex nicht überprüft, entweder auf diese spezifische E-Mail-ID
- Einer der Ansätze hier.
- Tun Sie etwas dagegen schreiben eine Antwort?
- Ich habe nicht einverstanden mit dem doppelten, also habe ich wieder geöffnet. Ich verstehe nicht, die down-votes, da Sie geliefert haben, gutes Beispiel-code und beschrieben Ihre Ziele klar und eindeutig. Up-vote von mir.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deine regex ist nicht so ein
-
nach der@
Zeichen, sowäre "fix" dieses spezielle problem Auftritt. Aber E-Mail-Adressen sind viel komplizierter als das. Überprüfen Sie mithilfe von regex ist keine gute Idee. Check out @DuncanJones' Kommentar.
Ich würde empfehlen, Sie nicht versuchen zu lösen das problem selbst. Verlassen Sie sich lieber auf eine bewährte Lösung wie
EmailValidator
von commons-validator.Beispiel:
gibt es viele regexp Validierung Zeichenfolgen, die Sie verwenden können. Wie hier
aber es ist wirklich nescesary haben die Optimale Lösung? Nicht brauchen Sie nur sub-optimale Lösung, umfasst von 99,9999% verwendet Adressen?
Lesen Sie diese
Artikel
Hinzufügen
\\-
zu diesem Abschnitt der regex-string nach der@
.Den
\\
ist eine Flucht erzählt Java, dass Sie nicht möchten, verwenden Sie den Bindestrich, da es normalerweise verwendet, um den Unterschied zu zeigen zwischen zwei Werten. So wie diese...Update
Tim bestätigt in den Kommentaren, dass die Flucht ist nicht nötig!
Und eine schnelle Spitze, die meine eigene ist, könnten Sie verwenden möchten
\w
im ersetzen von[A-Za-z0-9_]
so dass Sie nicht haben, um halten Sie schriftlich, dass über und über. Und schließlich machen Sie sich vertraut mit diese Website. Sobald Sie anfangen, mit regex es ist mir eine große Hilfe.\w
istA-Za-z0-9_
,\w
ist Obermenge von\d
.\w
ist toll und alles, denn es verkürzt die regex, aber die Sache ist die, dass die Leute vergessen immer, dass_
und Ziffern enthalten sind. Und seine Bedeutung, obwohl in der Regel konsequent zwischen den Sprachen, könnte ein upgrade erhalten zu entsprechen, Unicode-Zeichen, wie in .NETTO regulären Ausdruck. Ich habe nichts dagegen, um seine Verwendung, obwohl.