2009-07-10 6 views
0

Ich habe eine ASP.NET-Website mit einem Prüfprogramm für einen gültigen Ausdruck.Regulärer Ausdruck funktioniert nach dem Debuggen nicht

Ich habe den Ausdruck in der Validierungseigenschaft "validator expression" für reguläre Ausdrücke geändert und nach dem Kompilieren (rebuild) und dem Ausführen spiegeln die Validierungsänderungen nicht wider.

Die vorherige Validierung funktioniert einwandfrei, aber die geänderte Validierung funktioniert nicht.

Bitte helfen Sie mir!

edit:

Erster Code:

([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com)) 

Zweiter Code:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))" 
+0

Möglicherweise müssen Sie Ihre regulären Ausdrücke und möglicherweise den Code posten, den Sie zum Initialisieren Ihrer Validierer verwenden. –

+0

Laufen Sie lokal in VS oder überprüfen Sie eine veröffentlichte Website? Wenn es Letzteres ist, haben Sie die Änderungen nicht veröffentlicht? Wenn es das erste ist, versuchen Sie, den Browser zu schließen und Ihre Site erneut auszuführen. Ansonsten helfen Codebeispiele nicht weiter. – Lazarus

+0

Erster Code ([a-zA-Z0-9 _-.] +) \ @ ((Base.co.uk) | (base.com) | (group.com) | (arg.co.uk) | (arggroup.com)) Zweiter Code @ "([a-zA-Z0-9 _ \ -.] +) @ ((Basis \ .co \ .uk) | (Basis \ .com) | (Gruppe \ .com) | (arg \ .co \ .uk) | (arggroup \ .com)) " –

Antwort

-1

In diesem Teil: [a-zA-Z0-9_\-.] Sie den Bindestrich sind auf der Flucht. Der richtige Weg, einen Bindestrich in einem Regex Zeichenklasse zu setzen ist in der ersten Position (oder sie denkt, dass es Teil eines Bereichs):

[-a-zA-Z0-9_.] 

Dann entfernt man den umgekehrten Schrägstrich aus der Zeit vor dem @. In Perl würde das @ als Teil eines Listennamens verwendet werden, aber in C# bin ich mir nicht sicher, welchen Effekt es hätte, um es nicht zu umgehen.

Die Flucht der Zeiten ist auch suspekt. Sie müssen sie möglicherweise verdoppeln: z. \\. Stattdessen würde ich für eine bestimmte Zeit eine Zeichenklasse verwenden: d. H. [.] Innerhalb der Zeichenklasse verliert die Periode ihre spezielle Bedeutung.

Versuchen Sie folgende:

@"([-a-zA-Z0-9_.]+)\@((base[.]co[.]uk)|(base[.]com)|(group[.]com)|(arg[.]co[.]uk)|(arggroup[.]com))" 
+0

Das ist seltsam. Mit diesem ungesicherten Bindestrich sollte die ursprüngliche Regex nicht einmal kompiliert worden sein. Als ich es in RegExLibs Online-Tester getestet habe, bekam ich einen Fehler, der "[x-y] Bereich in umgekehrter Reihenfolge" sagt. –

+0

Das Entkommen des Bindestrichs in einer Zeichenklasse, um es zu einem Literal zu machen, funktioniert perfekt sowohl mit Perl als auch mit .NET. C# führt keine variable Interpolation wie Perl durch, es ist also nicht notwendig @ zu entkommen. [.] entspricht einem Literalpunkt genau wie \. außer dass es einen Buchstaben mehr zu tippen gibt. Verbatim-Zeichenfolgen in C# müssen keine umgekehrten Schrägstriche enthalten. –

+0

Ich kannte einmal eine Website, auf der Sie angeben konnten, welche Art von Regulärer Ausdruck Sie testen wollten, und sie unterstützte viele. Ich habe den Überblick verloren. Ich bevorzuge es, Syntax zu verwenden, die weit verbreitet ist, da es den Übergang von System zu System erleichtert. Welchen Regex Tester gefällt dir am besten? –

0

Ihren „ersten Code“ Angenommen, eine wörtliche regex ist, müssen Sie mit einem umgekehrten Schrägstrich des Bindestrich in der Zeichenklasse entkommen.

Ihr "zweiter Code" ist eine Regex formatiert als eine C# Verbatim-Zeichenfolge, die eine E-Mail-Adresse wie [email protected] passt gut. Mit dieser Regex ist nichts falsch.

Sie müssen den Code eingeben, in dem Sie diese Regex verwenden, wenn es nicht wie gewünscht funktioniert.