Frage

Ich bin mit Einschienen, active und jquery. Ich habe ein Formular mit einer Postleitzahl Textbox. Ich habe in meiner aktiven Datensatzklasse in das Formular zugeordnet:

[Property]
        [ValidateNonEmpty]
        [ValidateRegExp(@"/^\d{5}(-\d{4})?$/", "Invalid")]
        public string ZipCode { get; set; }

Wie Sie sehen, ich bin mit dem ValidateRegExp Attribut, das dann generiert automatisch jQuery Validate Regeln. Das Problem ist, dass reguläre Ausdrücke in JavaScript anders sind, als sie in C # sind. Javascript erfordert eine / vor und nach dem regulären Ausdruck, während C # nicht. Wenn ich die Schrägstriche setzen, dann wird die jQuery Validierung arbeiten, aber wenn sie Bypass der JavaScript-Validierung und senden Sie das Formular mit js deaktiviert (oder wenn jemand das Objekt durch ein anderes Mittel wie ein Testfall spart), dann wird es die Postleitzahl sagen ungültig, da C # nicht wie die Hiebe der Fall ist.

Also meine Frage ist, wie bitte Sie sowohl Javascript und C # mit einem regex? Ich würde erwarten, dass es klug genug sein, Schrägstriche hinzufügen vor und nach nur für die jQuery Validierung, so dass Sie die Regex in C #, ohne dass die Schrägstriche geben könnten, aber das ist nicht der Fall, so scheint es.

War es hilfreich?

Lösung

Sie sollten den regulären Ausdruck selbst sein spezifizieren, ohne die umliegenden / Zeichen.

Wenn Sie Probleme mit der Client-Seite haben, es würde helfen, wenn Sie die JS Fehler enthalten würden Sie sehen (falls vorhanden), und tatsächlich erzeugten JS-Code auf der Seite, die auf Ihre Seite durch Einschienen geschrieben wird, und auch die Version von Einschienen Sie verwenden.

Als Randnotiz, lässt Blick auf den Code der JS Gültigkeitsregel aus dem Validierungs Attribut in JQueryValidator.cs

das entsprechende Stück an der Linie 378 (Stand: aktueller Version der Code-Basis):

           "function(value, element, param) { return new RegExp(param).test(value); }" 

, was darauf hinweist, dass der new RegExp(expression) verwendet wird, anstatt das /expression/ Format. Damit - es ist klar, dass Jquery Validator Integration der Einschienen ok ist

.

Andere Tipps

Ich bin mit jQuery 1.4.2. Nicht sicher, welche Version von Monorail Ich verwende, die Castle.MonoRail.Framework dll sagt V2.0.0.0. Ich kann es zwar innerhalb der letzten 3 Monate aktualisiert, so ist es ziemlich neu. Die js, dass Sie zeigen an, dass Sie eine noch neuere Version als ich haben, wie es die folgende für mich (wenn keine Schrägstriche, die in dem ValidateRegExp Ausdruck) erzeugt:

"user.username": {required: true, regExp: ^ [\ w] {4,50} $}

Das gibt offensichtlich einen Syntaxfehler in js, wie es in Anführungszeichen oder Schrägstriche nicht umgebrochen wird. Ich landete ein neues RegExp Validator mit AbstractValidator als Basisklasse zu schaffen, die fehlerhaften zu umgehen, die in meiner Version von Monorail ist.

Möchten Sie wissen, ob dies ein Problem war, dass in den letzten paar Monaten festgelegt wurde? Ansonsten kann ich nicht erklären, wie Sie Ihr neues RegExp in js erzeugt und meine nicht ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top