Sie sollten keine regulären Ausdrücke zur Überprüfung von E-Mail-Adressen verwenden.
Verwenden Sie stattdessen in C# die MailAdresse Klasse, etwa so:
try {
address = new MailAddress(address).Address;
} catch(FormatException) {
// address is invalid
}
Die MailAddress
Klasse verwendet eine BNF Parser, um die Adresse in voller Übereinstimmung mit RFC822 zu validieren.
Wenn Sie planen, die MailAddress
um die E-Mail-Adresse zu validieren, sollten Sie beachten, dass dieser Ansatz auch den Teil des Anzeigenamens der E-Mail-Adresse akzeptiert, und das ist vielleicht nicht genau das, was Sie erreichen wollen. Zum Beispiel werden diese Zeichenfolgen als gültige E-Mail-Adressen akzeptiert:
- "user1@hotmail.com; user2@gmail.com"
- "user1@hotmail.com; user2@gmail.com; user3@company.com"
- "Benutzer-Anzeigename user3@company.com"
- "user4 @firma.de"
In einigen dieser Fälle wird nur der letzte Teil der Zeichenkette als Adresse geparst; der Rest davor ist der Anzeigename. Um eine einfache E-Mail-Adresse ohne Anzeigenamen zu erhalten, können Sie die normalisierte Adresse mit Ihrer ursprünglichen Zeichenfolge vergleichen.
bool isValid = false;
try
{
MailAddress address = new MailAddress(emailAddress);
isValid = (address.Address == emailAddress);
// or
// isValid = string.IsNullOrEmpty(address.DisplayName);
}
catch (FormatException)
{
// address is invalid
}
Außerdem kann eine Adresse mit einem Punkt am Ende, wie user@company.
wird auch von MailAddress akzeptiert.
Wenn Sie wirklich eine Regex verwenden wollen, hier ist es :
(?:(?:\\r\\n)?\[ \\t\])\*(?:(?:(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\]
)+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:
\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(
?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[
\\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*))\*@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\0
31\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\
\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+
(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:
(?:\\r\\n)?\[ \\t\])\*))\*|(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z
|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)
?\[ \\t\])\*)\*\\<(?:(?:\\r\\n)?\[ \\t\])\*(?:@(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\
r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[
\\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)
?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\]
)\*))\*(?:,@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[
\\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*
)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\]
)+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*)
\*:(?:(?:\\r\\n)?\[ \\t\])\*)?(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+
|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r
\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:
\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t
\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*))\*@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031
\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](
?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?
:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?
:\\r\\n)?\[ \\t\])\*))\*\\>(?:(?:\\r\\n)?\[ \\t\])\*)|(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?
:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?
\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)\*:(?:(?:\\r\\n)?\[ \\t\])\*(?:(?:(?:\[^()<>@,;:\\\\".\\\[\\\]
\\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|
\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>
@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"
(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*))\*@(?:(?:\\r\\n)?\[ \\t\]
)\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\
".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?
:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[
\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*|(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-
\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(
?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)\*\\<(?:(?:\\r\\n)?\[ \\t\])\*(?:@(?:\[^()<>@,;
:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[
^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\"
.\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\
\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*(?:,@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\
\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\
r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\]
\\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]
|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*)\*:(?:(?:\\r\\n)?\[ \\t\])\*)?(?:\[^()<>@,;:\\\\".\\\[\\\] \\0
00-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\
.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,
;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?
:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*))\*@(?:(?:\\r\\n)?\[ \\t\])\*
(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".
\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[
^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]
\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*\\>(?:(?:\\r\\n)?\[ \\t\])\*)(?:,\\s\*(
?:(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\
".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(
?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[
\\\["()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t
\])\*))\*@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t
\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?
:\\.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|
\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*|(?:
\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\
\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)\*\\<(?:(?:\\r\\n)
?\[ \\t\])\*(?:@(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["
()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)
?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>
@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*(?:,@(?:(?:\\r\\n)?\[
\\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,
;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:\\r\\n)?\[ \\t\]
)\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\
".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*)\*:(?:(?:\\r\\n)?\[ \\t\])\*)?
(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\["()<>@,;:\\\\".
\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])\*)(?:\\.(?:(?:
\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z|(?=\[\\\[
"()<>@,;:\\\\".\\\[\\\]\]))|"(?:\[^\\"\\r\\\\\]|\\\\.|(?:(?:\\r\\n)?\[ \\t\]))\*"(?:(?:\\r\\n)?\[ \\t\])
\*))\*@(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])
+|\\Z|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*)(?:\\
.(?:(?:\\r\\n)?\[ \\t\])\*(?:\[^()<>@,;:\\\\".\\\[\\\] \\000-\\031\]+(?:(?:(?:\\r\\n)?\[ \\t\])+|\\Z
|(?=\[\\\["()<>@,;:\\\\".\\\[\\\]\]))|\\\[(\[^\\\[\\\]\\r\\\\\]|\\\\.)\*\\\](?:(?:\\r\\n)?\[ \\t\])\*))\*\\>(?:(
?:\\r\\n)?\[ \\t\])\*))\*)?;\\s\*)
10 Stimmen
Der Regex, der überprüfen kann, ob eine IDNA korrekt formatiert ist, passt nicht in Stackexchange. (die Regeln für die Kanonisierung sind sehr umständlich und eignen sich besonders schlecht für die Regex-Verarbeitung)
13 Stimmen
Warum Sie dies nicht tun sollten: Kann es schaden, E-Mail-Adressen mit einer Regex zu validieren?
0 Stimmen
Die Regexe können sein variabel denn in manchen Fällen kann eine E-Mail ein Leerzeichen enthalten, in anderen Fällen darf sie keine Leerzeichen enthalten.
0 Stimmen
@Jasen Glücklicherweise gibt es keine Vorschrift, dass E-Mail-Adressen eine gültige IDNA haben müssen. E-Mail-Adressen sind so definiert, damit sie mit Erweiterungen der IDNA-Syntax vorwärtskompatibel sind.
0 Stimmen
Sie können Symfonys Regex für eine lose und strenge Prüfung überprüfen: github.com/symfony/symfony/blob/5.x/src/Symfony/Component/
0 Stimmen
Die Verwendung von Regex kann die Sicherheit des Servers beeinträchtigen, aber wenn es sich nur um ein Eingabemuster handelt, schlage ich vor, dieses zu verwenden: stackoverflow.com/questions/5601647/
0 Stimmen
Ich empfehle Ihnen, diesen Artikel zu lesen: debounce.io/blog/articles/email-syntax-error-explained
0 Stimmen
Verwenden Sie diesen Ausdruck für die E-Mail-ID -
^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
0 Stimmen
Ähnlich: Wie lässt sich eine E-Mail-Adresse am besten in JavaScript validieren?
0 Stimmen
Ich bin zwar spät dran, aber da PHP erwähnt wurde, sollten Sie die Verwendung von filter_var()