Ich benutze ein Email Validierungsmuster, das ich bei How to validate an email gefunden habe und es funktioniert gut, außer es erlaubt eine +
im ersten Teil der E-Mail und das ist nicht in meinen Spezifikationen erlaubt. Der ursprüngliche Code istEmail Validierungsmuster Unclosed Zeichenklasse
public static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
protected boolean isInvalidEmail(String email) {
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return !matcher.matches();
}
Ich dachte, ich könnte nur die +
von "^[_A-Za-z0-9-\\+]
entfernen, aber ich bekomme eine Pattern Syntax Exception: Unclosed Character Class
. Kann mir jemand sagen, warum das Entfernen der +
die Klasse freigibt? Vielen Dank!
Es ist seltsam, dass sie das '\\ +' nach dem letzten '-' setzen, oder? Das '-' hat nur seine wörtliche Darstellung am Anfang oder Ende einer Zeichenklasse und fungiert ansonsten als Bereichsoperator. Die Quelle dieser Regex scheint also nicht vertrauenswürdig zu sein. –
@AndrewCheong Ich dachte, das wäre auch seltsam, aber die [Top 5 Regex-Tester] (https://www.google.com/search?client=ubuntu&channel=fs&q=java+regex+tester&ie=utf-8&oe=utf- 8) zeige keine Fehler und stimmt mit gültigen Strings überein, wie 'example- @ email.com'. Wenn der Bindestrich jedoch nicht am Anfang oder Ende steht, sollte er mit Escapezeichen versehen werden ('\ -'). –