2009-02-21 1 views
9

Wir verwenden die folgende E-Mail-Validierung in ASP.NET zu tun:Regex Email - Ignorieren führende und nachfolgende Leerzeichen?

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

Wie diese Räume ignorieren kann geändert werden Vorder- und Hinter?

Das tatsächliche Trimmen, das wir im Code beim Postback behandeln, aber der Validator wird als ungültig ausgelöst, wenn der Benutzer aufgrund von Kopieren und Einfügen einen zusätzlichen Platz hat.

+0

Sie sollten dies lesen: http://mail.python.org/pipermail/python-list/2006-September/404146.html – Gumbo

+0

Senden einer Testnachricht ist keine Option. Es muss so gut wie möglich auf dem Formular vor der Einreichung validiert werden. – schooner

Antwort

4

Tun Sie einfach die Trimmung, bevor Sie sie an den Validator übergeben.

+0

Es ist ein asp.net Validator mit einem Textfeld verbunden, so dass nicht sicher, dass das standardmäßig möglich ist. Ich würde es vorziehen, wenn die Regex es handhaben würde. – schooner

+1

Warum? Die Leerzeichen sind * nicht * Teil einer gültigen E-Mail, daher sollte die Regex diese nicht sehen. Trimmen Sie den Wert mit einer Aktion onchange/onsubmit. –

+0

Ich bevorzuge das mehr als in einer Regex. "[email protected]" ist keine gültige E-Mail. Die zusätzlichen Leerzeichen beziehen sich mehr auf die Datenquelle. So, als würden Sie eine E-Mail in der Datenbank nicht mit demselben E-Mail-Regex validieren, der Leerzeichen akzeptiert. Wenn Sie die E-Mail von einer Abfragezeichenfolge erhalten, würden Sie keine Regex verwenden, die codierte Sachen erlaubt, Sie würden es zuerst entschlüsseln und dann validieren. Wenn sie MVC-Validatoren verwenden, dann sind sie der MS-Technik ausgeliefert. Sie haben also möglicherweise keine Wahl. –

7

Gruppe, was Sie in einer benannten Capture wollen und lassen dann Leerzeichen vor und nach der Einnahme

\s*(?<email>\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)*)\s* 
+2

Nicht zu vergessen "^" und "$". – Tomalak

+1

Funktioniert nicht mit ''. Verwenden Sie statt dessen \ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s * '. –

13

Sie können \s* Platz vor und nach dem Muster und es sollte funktionieren.

+0

Ich mochte deine Antwort. Einfach und es funktioniert. Vielen Dank. – Sunil

+1

Ihr Vorschlag funktioniert: '\ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s * ' –

+0

Ich weiß, das ist ziemlich alt, aber ich denke, es ist noch heute sehr relevant. Wenn das Ziel ist, eine Regex nur für rohe Benutzer eingegebene E-Mail zu machen, dann denke ich, das ist die richtige Antwort. Wenn Sie jedoch eine Regex für eine gültige E-Mail wünschen, ist dies falsch. Bei großen Apps möchten Sie den gleichen Regex in vielen Layern wiederverwenden, in kleinen Apps würde das funktionieren, aber Sie sollten wissen, dass es nicht skaliert. –

1

Bei ASP.NET die folgenden Werke:

<asp:TextBox runat="server" ID="EmailAddress" /> 
<asp:RegularExpressionValidator ValidationExpression="\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*" runat="server" ControlToValidate="EmailAddress" Text="*" ErrorMessage="Email is not valid" /> 

Ermöglicht eine Vielzahl von E-Mails wie:

"[email protected]" 
" [email protected] " 
"[email protected]" 
" [email protected] " 

etc

Stellen Sie sicher, dass die weißen Flecken in Ihrem Code Streifen wie folgt:

VB Dim Email as string = EmailAddress.Text.Trim()

C# string Email = EmailAddress.Text.Trim();

0

ich würde dies als ein einfacher Kommentar zu „Antwort“, aber die wirkliche Antwort auf Ihre Frage ist, dass es keine Antwort.

Warum?

Da jede E-Mail-Adresse mit Leerzeichen oder Leerzeichen davor oder danach, ist eine ungültige E-Mail-Adresse.

Sie versuchen, eine E-Mail-Adresse mit Leerzeichen um es in ein SMPTP-Steuerelement zum Beispiel zu übergeben, und versuchen Sie es zu senden, es wird fehlschlagen!

Alle E-Mail-Adressen aus der Sicht dieses regex ...

\ w + validiert werden müssen ([- + '.] \ W +) @ \ w + ([-.] \ w +) \ w + (. [-.] \ w +) *

oder sogar unter

/[email protected]+/

Sonst noch ist eine ungültige E-Mail-Adresse.

Wirklich der Weg herum ist es, TRIM() die Zeichenfolge vor dem Übergang in eine E-Mail-Steuerelement, um es zu verwenden.

Nur warnend.