4146 Stimmen

Wie kann ich eine E-Mail-Adresse mithilfe eines regulären Ausdrucks überprüfen?

Im Laufe der Jahre habe ich langsam eine regulärer Ausdruck die die Gültigkeit Die meisten E-Mail-Adressen korrekt, vorausgesetzt, sie verwenden keine IP-Adresse als Serverteil.

Ich verwende es in mehreren PHP-Programmen, und es funktioniert die meiste Zeit. Von Zeit zu Zeit werde ich jedoch von jemandem kontaktiert, der Probleme mit einer Website hat, die es verwendet, und ich muss dann einige Anpassungen vornehmen (vor kurzem habe ich festgestellt, dass ich keine vierstelligen Buchstaben zulasse TLDs ).

Was ist der beste reguläre Ausdruck, den Sie haben oder gesehen haben, um E-Mails zu validieren?

Ich habe mehrere Lösungen gesehen, die Funktionen verwenden, die mehrere kürzere Ausdrücke verwenden, aber ich hätte lieber einen langen komplexen Ausdruck in einer einfachen Funktion als mehrere kurze Ausdrücke in einer komplexeren Funktion.

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

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.

29voto

BalusC Punkte 1034465

Seit Mai 2010 Im Internet gibt es nicht-lateinische (chinesische, arabische, griechische, hebräische, kyrillische usw.) Domänennamen. Jeder muss die verwendete E-Mail-Regex ändern, denn diese Zeichen sind sicher nicht durch [a-z]/i noch \w . Sie werden alle scheitern.

Schließlich ist die am besten Weg, die E-Mail-Adresse zu überprüfen, ist immer noch, die senden. eine E-Mail an die betreffende Adresse, um die Adresse zu bestätigen. Wenn die E-Mail-Adresse Teil der Benutzerauthentifizierung ist (Registrierung/Anmeldung/etc), können Sie sie perfekt mit dem Benutzeraktivierungssystem kombinieren. D.h. Sie senden eine E-Mail mit einem Link mit einem eindeutigen Aktivierungsschlüssel an die angegebene E-Mail-Adresse und erlauben die Anmeldung nur, wenn der Benutzer das neu erstellte Konto über den Link in der E-Mail aktiviert hat.

Wenn der Zweck der Regex nur darin besteht, den Benutzer in der Benutzeroberfläche schnell darüber zu informieren, dass die angegebene E-Mail-Adresse nicht das richtige Format hat, ist es immer noch am besten, zu prüfen, ob sie im Wesentlichen mit der folgenden Regex übereinstimmt:

^([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)$

So einfach ist das. Warum in aller Welt sollten Sie sich um die im Namen und in der Domäne verwendeten Zeichen kümmern? Es liegt in der Verantwortung des Kunden, eine gültige E-Mail-Adresse einzugeben, nicht in der des Servers. Selbst wenn der Kunde eine syntaktisch gültige E-Mail Adresse wie aa@bb.cc ist dies keine Garantie dafür, dass es sich um eine legitime E-Mail-Adresse handelt. Keine einzige Regex kann das abdecken.

5 Stimmen

Ich stimme zu, dass das Senden einer Authentifizierungsnachricht in der Regel der beste Weg für diese Art von Dingen ist, da syntaktisch korrekt und gültig nicht dasselbe sind. Es frustriert mich, wenn ich gezwungen werde, meine E-Mail-Adresse zweimal für "Confirmation" einzugeben, als ob ich nicht nachsehen könnte, was ich eingegeben habe. Ich kopiere sowieso nur die erste in die zweite, das scheint sich immer mehr durchzusetzen.

2 Stimmen

Zustimmen! aber diese Regex ist meiner Meinung nach nicht gültig, weil sie erlaubt spaces nach dem @. Ej. test@test.ca com net wird bei Verwendung der obigen Regex als gültige E-Mail betrachtet, während sie eigentlich ungültig sein sollte.

28voto

Eric Schoonover Punkte 45504

Die umfassendste Bewertung des besten regulären Ausdrucks für die Validierung einer E-Mail-Adresse finden Sie unter diesem Link; " Vergleichen von regulären Ausdrücken zur Überprüfung von E-Mail-Adressen "

Hier ist der aktuelle Top-Ausdruck zu Referenzzwecken:

/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i

1 Stimmen

Spoon16: Dieser Link ist nicht ganz korrekt. Seine Aussage, dass es kein perfektes Muster für die Validierung von E-Mail-Adressen geben kann, ist ein offensichtlicher Fehler. Sie kann aber Sie müssen sicherstellen, dass Sie den RFC genau befolgen. Und Sie müssen auch den richtigen RFC auswählen.

1 Stimmen

Die "beste" derzeit nicht mit Java Regex arbeiten - auch nach ordnungsgemäß escaping und Konvertierung der Zeichenfolge.

25voto

Luna Punkte 1357

Die Die HTML5-Spezifikation schlägt vor eine einfache Regex zur Überprüfung von E-Mail-Adressen:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

Dies entspricht absichtlich nicht den RFC 5322 .

Anmerkung: Diese Anforderung ist eine vorsätzliche Verletzung de RFC 5322 die eine Syntax für E-Mail-Adressen festlegt, die gleichzeitig zu streng ist (bevor die @ Zeichen), zu vage (nach dem @ Zeichen) und zu lasch (erlaubt Kommentare, Leerzeichen und Zeichenketten in Anführungszeichen in einer Weise, die den meisten Benutzern unbekannt ist), um hier von praktischem Nutzen zu sein.

Die Gesamtlänge könnte auch auf 254 Zeichen begrenzt werden, je RFC 3696 errata 1690 .

2 Stimmen

Beste Antwort! Hier ist ein Link zur w3-Empfehlung: w3.org/TR/html5/forms.html#valid-e-mail-address Diese Regex wird von vielen Browsern übernommen.

6 Stimmen

Das ist SO nicht die beste Antwort! Dieses Muster passt zu dieser völlig ungültigen Adresse: invalid@emailaddress . Ich würde zur Vorsicht raten und viele Tests durchführen, bevor Sie es verwenden!

1 Stimmen

@Sheridan, wenn Sie glauben, dass es ein Problem mit der HTML5-Spezifikation gibt, können Sie hier ein Problem melden: github.com/w3c/html/issues

16voto

Greg Bacon Punkte 127209

Für eine anschauliche Demonstration ist das folgende Monster ziemlich gut, aber es erkennt immer noch nicht alle syntaktisch gültigen E-Mail-Adressen korrekt: Es erkennt verschachtelte Kommentare bis zu vier Ebenen tief.

Dies ist eine Aufgabe für einen Parser, aber selbst wenn eine Adresse syntaktisch gültig ist, kann sie dennoch nicht zustellbar sein. Manchmal muss man auf die Hinterwäldlermethode zurückgreifen: "Hey, ihr alle, passt auf uns auf!"

// derivative of work with the following copyright and license:
// Copyright (c) 2004 Casey West.  All rights reserved.
// This module is free software; you can redistribute it and/or
// modify it under the same terms as Perl itself.

// see http://search.cpan.org/~cwest/Email-Address-1.80/

private static string gibberish = @"
(?-xism:(?:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
|\s+)*[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(?-xism:(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?
:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<DQ>(?-xism:(?-xism:[
^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D])))+<DQ>(?-xism:(?-xi
sm:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xis
m:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\
s*)+|\s+)*))+)?(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?
-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:
\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<(?-xism:(?-xi
sm:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^(
)\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(
?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))
|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<
>\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]
+)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:
(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s
*\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?
:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xi
sm:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*
<DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D]
)))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-x
ism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+
)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:(
?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?
-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s
*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(
?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism:
\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
)|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)
+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:
(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((
?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-x
ism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-xi
sm:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:
\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+
)*\s*\)\s*)+|\s+)*)))>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-
xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))|(?-xism:(?-x
ism:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*
(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D])
)|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()
<>\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s
]+)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
)|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism
:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\
s*\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((
?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-x
ism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)
*<DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D
])))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\
\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-
xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)
+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:
(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(
?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[
^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\
s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+
(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism
:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:
[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+
))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*
)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism
:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\(
(?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A
\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-
xism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-x
ism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism
:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:
(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))
+)*\s*\)\s*)+|\s+)*))))(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?
>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:
\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0
D]))|)+)*\s*\)\s*))+)*\s*\)\s*)*)"
  .Replace("<DQ>", "\"")
  .Replace("\t", "")
  .Replace(" ", "")
  .Replace("\r", "")
  .Replace("\n", "");

private static Regex mailbox =
  new Regex(gibberish, RegexOptions.ExplicitCapture);

1 Stimmen

Welche Programmiersprache? C# ?

14voto

AZ_ Punkte 36741

Gemäß der offiziellen Norm, RFC 2822 ist eine gültige E-Mail-Regex:

(?:[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])+)\])

Wenn Sie es in Java verwenden wollen, ist das wirklich sehr einfach:

import java.util.regex.*;

class regexSample 
{
   public static void main(String args[]) 
   {
      //Input the string for validation
      String email = "xyz@hotmail.com";

      //Set the email pattern string
      Pattern p = Pattern.compile(" (?:[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])+)\\]");

      //Match the given string with the pattern
      Matcher m = p.matcher(email);

      //Check whether match is found 
      boolean matchFound = m.matches();

      if (matchFound)
        System.out.println("Valid Email Id.");
      else
        System.out.println("Invalid Email Id.");
   }
}

2 Stimmen

Ihr Regex enthält zum Beispiel keinen ersten Großbuchstaben Leonardo.davinci@gmail.com was für manche Benutzer lästig sein könnte. Verwenden Sie stattdessen diese: (?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+/=?‌​^_`{|}~-]+)*|"(?:[\x‌​01-\x08\x0b\x0c\x0e-‌​\x1f\x21\x23-\x5b\x5‌​d-\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])+)\])

0 Stimmen

@KebabKrabby Danke, bitte editieren Sie die Antwort, ich werde die Änderung akzeptieren.

0 Stimmen

Wenn ich diese Änderung zu Ihrer Antwort hinzufüge, wird es nicht mehr RFC 2822 sein, also weiß ich nicht, ob das korrekt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X