2016-04-19 10 views
1

Ich versuche, eine vorhandene E-Mail-Regex zu ändern, um einen Bindestrich zwischen Zeichen zu ermöglichen, genau wie das Punkttrennzeichen.Regex lehnt einen Teil der ersten Gruppe (Auftrag) ab

^([\w]+(?:\.[\w]+)*(?:\-[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

Ich habe Probleme mit der Bestellung: Wenn ich den Bindestrich und dann dem Punkt verwenden, ignoriert die regex alles auf der linken Seite des Zeichens vor dot:

[email protected] ->my-coo[email protected] (die Leerstelle nicht stören).

Die maximale Länge Grenze für die ersten beiden Gruppen ist 64, aber es funktioniert nicht, wenn ich mehr als 64 Zeichen gibt es die Regex, und es ist gültig. Die maximale Länge der dritten Gruppe ist 7, und es wird nicht validiert, wenn es mehr ist.

Sie als Beispiel nehmen: a[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa ist ein gutes Ergebnis

und

aa[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa ein schlechtes Ergebnis ist.

Das erste Beispiel haben 64 a s vor und nach dem @ und das zweite Beispiel haben 65 a s

https://regex101.com/r/yO1xH7/3

Ich würde auch gleich nach dem @ zu tun, aber es ist komplizierter, dann dachte ich.

Irgendwelche Vorschläge? Vielen Dank.

Antwort

1

Sie haben einen kleinen Fehler gemacht, wo Sie den Bindestrich setzen. Dies ist die richtige:

^([\w]+(?:[\.\-][\w]+)*(?:[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

Ich denke, die Sie nicht verstehen, weil Sie die Funktion von ?: nicht kennen. Es ist Regex nicht einfangende Gruppe. Es ist beabsichtigt, dieses Muster dort zu vermeiden.

+0

Definieren Sie die Länge, die Sie wollen, dann kann ich Ihnen helfen –

+0

Ich meine, definieren Sie es mit Wort. Vielleicht gib mir ein Beispiel für zu lange E-Mails, die die Regex passieren und was es sein sollte –

+0

Ich habe Ihre Regex mehrmals gesehen. Ich muss es in ** menschlicher Sprache erklären, nicht in der Sprache. Gib mir das erwartete Ergebnis und was ist das aktuelle falsche Ergebnis. Aktualisieren Sie Ihre Frage und sagen Sie mir, wenn es fertig ist. –